今天再做项目中遇到一个问题: "点击通知时, 应用不能启动", 源码如下:
前人就是这样写的, 大部分手机都ok, 点击通知可以正常启动应用, 但是部分手机就不行了 (如华为P6)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());
经过一番折腾, 添加了下面一句, 问题就解决了:
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>