2015-09-29 4 views
0

Я разрабатываю приложение, в котором у меня есть действие 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); 

     } 

    } 
+0

попробовать это http://stackoverflow.com/questions/8750854/bring-task-to-front-on-android-intent-action-user-present –

ответ

1

это работало для меня Намерение в = новый 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

+0

плюс один для вашего ответа –

0

Если вы используете FLAG_ACTIVITY_NEW_TASK, он будет воссоздавать его каждый раз.

Попробуйте использовать FLAG_ACTIVITY_BROUGHT_TO_FRONT, как описано here

Если это не приведет к конфликту с вашей proyect нуждается вы можете установить launchmode в приложении manifiest.xml

android:launchMode="singleInstance" 

ссылка: Resume started activity from Service

Надеется, что это помогает.

+0

, когда я не использую FLAG_ACTIVITY_NEW_TASK это дает я ошибаюсь, что он не может вызывать активность из-за пределов своего контекста и нуждается в этом флаге –

+0

Это ваша проблема, не работает ли это, передавая это как контекст? насколько я знаю, Сервис - это контекст. – Nanoc

+0

Я пробовал, но все равно дает мне эту ошибку –

0

Используйте этот код и объявить этот

Контекст CTX = это;

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); 

добавить андроида: launchMode = "SingleTop" в манифесте для этого activty

+0

он воссоздает мою деятельность –

+0

попробуйте приведенный выше код, я изменил –

+0

, это дает мне ошибку «Вызов startActivity() извне контекста действия требует флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вы хотите?» потому что setFlags переопределяет предыдущий, но это сработало для меня 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); –

0

Вы можете назвать новый вид деятельности, как это.

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

попробовать это,

Проблема заключается в том, вы не можете использовать метод startActivity на вещательного приемника попробовать с этим.

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

sendBroadcast(mIntent); 
Смежные вопросы