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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章