2011-08-10 54 views
0

我仍然在前臺開始服務時感到十分困惑。Android PendingIntent for foreGround服務

當前:我有一個活動,在後臺啓動一個服務來執行傳感器數據+ GPS數據的統計。它不斷被殺死,所以我開始在前臺。工作正常。 但是,當我觸摸狀態欄中的通知圖標時,它似乎開始一個新的活動(我在待定意圖中聲明)。

所以簡而言之,我仍然對整個事情感到困惑。 我想要一個活動在前臺啓動一項服務,並且當您單擊通知欄時,它會將啓動服務的現有活動帶到前臺。

這裏的活動(當前設置的PendingIntent爲null)中的一些代碼:

private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     // This is called when the connection with the service has been 
     // established, giving us the service object we can use to 
     // interact with the service. Because we have bound to a explicit 
     // service that we know is running in our own process, we can 
     // cast its IBinder to a concrete class and directly access it. 

     cycleDataService = ((CycleDataProService.LocalBinder) service) 
       .getService(); 
     //Todo the notification bullshaite here... 
     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
     int icon = R.drawable.icon; 
     CharSequence tickerText = "Hello"; 
     long when = System.currentTimeMillis(); 
     Notification notification = new Notification(icon, tickerText, when); 
     Context context = getApplicationContext(); 
     CharSequence contentTitle = "My notification"; 
     CharSequence contentText = "Hello World!";   
     //Intent notificationIntent = new Intent(cycleDataService, CycleDataProService.class); 
     //PendingIntent contentIntent = PendingIntent.getActivity(context, 0, myOwnIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     PendingIntent pi = PendingIntent.getActivity(context, 0, null, 0); 

     //PendingIntent contentIntent = PendingIntent.getActivity(context, 0, , 0); 
     notification.setLatestEventInfo(context, contentTitle, contentText, pi); 
     mNotificationManager.notify(HELLO_ID, notification); 
     cycleDataService.startForeground(HELLO_ID, notification); 
     /*cycleDataService.startService(new Intent(cycleDataService, 
       CycleDataProService.class));*/ 
     serviceIsRunning = true; 
     // Tell the user about this for our demo. 
     // Toast.makeText(Binding.this, R.string.local_service_connected, 
     // Toast.LENGTH_SHORT).show(); 
    } 

回答

2

用這樣的方式:

Intent notificationIntent = new Intent(context, YourActivity.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
    notification.contentIntent = contentIntent; 
    notification.setLatestEventInfo(context, "title", null, contentIntent); 
0

使用FLAG_ACTIVITY_SINGLE_TOP如果你希望你的活動繼續下去,而不是重新啓動。

Intent notificationIntent = new Intent(context, YourActivity.class); 
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
notification.contentIntent = contentIntent; 
notification.setLatestEventInfo(context, "title", null, contentIntent);