从服务类调用活动

时间:2015-09-29 10:04:28

标签: android service

我开发了一个应用程序,我有一个活动A,当它处于暂停状态时我正在调用一个服务类,当窗口按下时我想要回忆活动A创建一个窗口在最后一个暂停状态下再次从后台堆栈, 我尝试了很多东西,但它不断重新创建活动,我尝试了singleTask lunchMode和很多东西,但没有任何作用

这是我的服务类:

public class ChatHeadService extends Service {

   public static WindowManager windowManager;
   public static ImageView chatHead;
   public static View myview;

    @Override public IBinder onBind(Intent intent) {
        // Not used
        return null;
    }

    @Override public void onCreate() {
        super.onCreate();

       LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                //WindowManager.LayoutParams.TYPE_INPUT_METHOD |
                WindowManager.LayoutParams.TYPE_PHONE,// | WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.RIGHT | Gravity.TOP;
        myview = li.inflate(R.layout.dial_actionbar, null);
        chatHead=(ImageView)myview.findViewById(R.id.dialbar);
        chatHead.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                windowManager.removeView(myview);
                Intent goback = new Intent(ChatHeadService.this, IncomingCallScreen.class);
                goback.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                ChatHeadService.this.startActivity(goback);
                return true;

            }
        });

        windowManager.addView(myview, params);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        windowManager.removeView(myview);
    }


}

这是我调用服务的部分: @override

 protected void onPause() {
        super.onPause();
        if(incomingCall==true)
        {
            Intent gotoBackService=new Intent(getApplicationContext(),ChatHeadService.class);
            startService(gotoBackService);

        }

    }

5 个答案:

答案 0 :(得分:1)

这对我有用   Intent in = new Intent()。setClass(ChatHeadService.this,IncomingCallScreen.class);                 in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                 in.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);                 ctx.startActivity(IN);

并设置launchMOde:SingleTop

答案 1 :(得分:0)

如果您使用FLAG_ACTIVITY_NEW_TASK,则每次都会重新创建它。

按照here

的说明尝试使用FLAG_ACTIVITY_BROUGHT_TO_FRONT

如果这不会导致与您的proyect需求冲突,您可以在app manifestiest.xml中设置launchmode

android:launchMode="singleInstance"

参考:Resume started activity from Service

希望这有帮助。

答案 2 :(得分:0)

使用此代码并声明此

上下文ctx = this;

Intent in=new Intent().setClass(MyAlarmService.this,Reminder.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
in.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   
ctx.startActivity(in);

还在您的清单中为此激活

添加android:launchMode =“singleTop”

答案 3 :(得分:0)

您可以像这样调用新活动。

 Intent intent = new Intent(getBaseContext(),Activity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 getApplication().startActivity(intent);   

答案 4 :(得分:0)

试试这个,

问题是您无法在广播接收器上使用startActivity方法尝试使用此方法。

Intent mIntent=new Intent(FinishService.this,Information.class);

sendBroadcast(mIntent);