Android - 点击通知不会跳转到活动页面。

4

我有一个计时器,完成后会创建一个通知。点击通知应该会跳转到名为TimerActivity的活动页面。我是这样创建通知的:

mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(completeNotificationIcon)
.setContentTitle(completeNotificationTitle)
.setContentText(completeNotificationText)
.setTicker(completeNotificationTicker)
.setAutoCancel(true);

Intent notificationIntent = new Intent(this, TimerActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
mBuilder.setContentIntent(contentIntent);
mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 

问题是活动无法打开,通知只会自动取消。
进一步调查发现,只有TimerActivity不会像这样打开。如果我将意图更改为打开SttingsActivity.class,它就可以按预期工作了。清单中的TimerActivity:
    <activity   
       android:name=".TimerActivity"
       android:parentActivityName=".MainActivity"
       android:label="@string/action_timer"
       android:theme="@style/AppTheme">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />           
    </activity>

但它像其他通过点击通知打开/运行的活动一样被定义。

https://dev59.com/4Xzaa4cB1Zd3GeqPRYtJ#8qflnYgBc1ULPQZFMLh5 - user1544337
2个回答

4
解决方案是在PendingIntent中添加FLAG_CANCEL_CURRENT标志。

0
你正在尝试在一个活动之外打开一个活动, 你应该在意图上设置一些标志,使其正常工作。请尝试此代码并告诉我。
 mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(completeNotificationIcon)
.setContentTitle(completeNotificationTitle)
.setContentText(completeNotificationText)
.setTicker(completeNotificationTicker)
.setAutoCancel(true);

Intent notificationIntent = new Intent(this, TimerActivity.class);
       notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//single top to avoid                //creating many activity stacks queue
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(contentIntent);
mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 

实际上,这是一些无意义的错误,发生在缓存的意图和应用程序重新安装时。谷歌的无能再次显现... http://code.google.com/p/android/issues/detail?id=61850 和 http://code.google.com/p/android/issues/detail?id=63236 - TimSim
我的解决方案有效吗? - murielK
4
不,解决方法是为 PendingIntent 添加 FLAG_CANCEL_CURRENT 标志。 - TimSim
1
@TimSim,你能否把那个作为你的答案发布并接受它呢?我已经寻找了将近一个小时来获取这个答案,几乎在你的评论中错过了它。 - zgc7009

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接