簡體   English   中英

服務類的呼叫活動

[英]calling activity from a service class

我正在開發一個應用程序,當它處於暫停狀態時,我有一個活動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);

        }

    }

這對我有用的是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

如果您使用FLAG_ACTIVITY_NEW_TASK,它將每次重新創建。

嘗試使用FLAG_ACTIVITY_BROUGHT_TO_FRONT作為解釋這里

如果這不與您的proyect需求引起沖突,則可以在app manifiedt.xml中設置啟動模式

android:launchMode="singleInstance"

參考: 從服務恢復已開始的活動

希望這可以幫助。

使用此代碼並聲明

上下文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”

您可以像這樣調用新活動。

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

嘗試這個,

問題是您不能在廣播接收器上使用startActivity方法嘗試此方法。

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

sendBroadcast(mIntent);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM