1. 程式人生 > >Android 點選通知欄中的通知啟動應用

Android 點選通知欄中的通知啟動應用

今天再做專案中遇到一個問題: "點選通知時, 應用不能啟動", 原始碼如下: 

Context application = getApplicationContext();
Intent resultIntent = new Intent(application, MainActivity.class);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent resultPendingIntent = PendingIntent.getActivity
(application, 0, resultIntent, 0); NotificationManager nmgr = (NotificationManager) application.getSystemService(Context.NOTIFICATION_SERVICE); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(application) .setSmallIcon(R.drawable.ic_actionbar_notification) .setContentTitle(application.getString(R.string.app_name
)) .setContentText(body.getString(Constants.PUSH_MSG)) .setOnlyAlertOnce(false) .setAutoCancel(true) .setTicker(body.getString(Constants.PUSH_MSG)) .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE) .setContentIntent(resultPendingIntent);
nmgr.notify(0, mBuilder.build());
前人就是這樣寫的, 大部分手機都ok, 點選通知可以正常啟動應用, 但是部分手機就不行了 (如華為P6)

經過一番折騰, 添加了下面一句, 問題就解決了: 

resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);

原來, 應用的 "入口Activity" 必須要新增Intent.CATEGORY_LAUNCHER(值: android.intent.category.LAUNCHER)這個Category, 否則應用就無法啟動.  當應用被殺死後, 我們點選通知就是要重新啟動應用, 重新啟動應用就要從"入口Activity"啟動, 

而我所做的專案中的MainActivity確不是 "入口Activity".  因此無法啟動. 

因此你要啟動應用, 而你啟動的Activity有不是"入口Activity"時, 就必須給intent新增 Intent.CATEGORY_LAUNCHER  這個Category.

說明: "入口Activity" 就是App的啟動入口, 可以想象為main函式, 一般命名為MainActivity, 它再manifest檔案中的配置一般有這樣一個<intent-filter>

<intent-filter>
    <action android:name="android.intent.action.MAIN" />    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>