[英]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.