2014-09-02 70 views
2

我必須在收到通知時啓動應用程序。當應用程序被終止並收到通知時(即條件內部的代碼),以下代碼工作正常。但是當應用程序在前臺或後臺運行時,會創建多個活動實例(即其他條件中的代碼段)。這不是在接收通知時必須啓動的MainActivity,而是包含廣播Receiver的其他一些活動。 我在GCMintentService類的onMessage中添加了以下幾行。在收到通知時自動打開Android活動

if (currentPackage.equalsIgnoreCase(context.getPackageName() 
       .toString())) { 
      broadcastMessage(context, message); 
     } else { 
      Intent mIntent = new Intent(context, MainActivity.class); 
      mIntent.setAction(Intent.ACTION_MAIN); 
      mIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
      mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(mIntent); 
     } 

在活動中,在BroadcastReceiver的onReceive方法下,我再次啓動活動。

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     startActivity(getIntent().setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)); 
    } 
}; 

回答

0

我在我的應用程序中也有這個要求。如果我們調用

Intent mIntent = new Intent(context, MainActivity.class); 
       mIntent.setAction(Intent.ACTION_MAIN); 
       mIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
       mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(mIntent); 
broadcastMessage(context, message); 

在主要活動使用,將收到上述廣播的消息廣播接收器下面我們可以實現它。

WakeLock wakeLock = null; 
     KeyguardManager kgMgr = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
     boolean locked = kgMgr.inKeyguardRestrictedInputMode(); 
     PowerManager pm = (PowerManager) context 
       .getSystemService(Context.POWER_SERVICE); 
     if (!pm.isScreenOn()) { 
      wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
        | PowerManager.ACQUIRE_CAUSES_WAKEUP, "MyWakeLock"); 
      wakeLock.acquire(); 
     } 
     if (locked) { 
      Window mWindow = getWindow(); 
      mWindow.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
      mWindow.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
     } 

我個人覺得這是不是最好的答案,也最好的想法,當接到通知,就會出現類似的onCreate的onResume很多功能直接打開應用程序,會自動觸發,棄土用戶如果通過直接打開另一個應用程序來進行真正重要的工作,也需要使用大量標誌或使用任何其他方法來管理應用程序的流程,當用戶打開應用程序時,應用程序來自後臺,應用程序已打開通知和所有這些情況避免它,因爲它會損害整個用戶體驗。

相關問題