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>

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