Aks*_*iom 12 notifications android push-notification onnewintent
我看到了几种方法,我尝试了一切,但无法使它工作.我不知道为什么它如此复杂,在文档中它看起来如此简单!我想通过通知触发OnNewIntent(用户在通知栏中单击它).
目前我已将Activity设置为singleTop
<activity
android:name="-.-.-.MainMenuActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" >
</activity>
Run Code Online (Sandbox Code Playgroud)
这是我创建通知的代码:
public void showNotification(String text, String componentId){
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.logo)
.setContentTitle("Title")
.setAutoCancel(true)
.setContentText(text);
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, MainMenuActivity.class);
if(!componentId.equalsIgnoreCase("")){
resultIntent.putExtra("componentId", componentId);
}
resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, 0);
mBuilder.setFullScreenIntent(resultPendingIntent, false);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.notify(0, mBuilder.build());
}
Run Code Online (Sandbox Code Playgroud)
这是我的MainMenuActivity中的OnNewIntent方法:
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
setIntent(intent);
...
}
Run Code Online (Sandbox Code Playgroud)
我从未接到过OnNewIntent电话.我不知道我做错了什么.我在整个应用程序中只使用了2个活动,并且MainMenuActivity位于LoginActivity之后,因此MainMenuActivity应始终位于堆栈顶部(我有更多的片段,我在MainMenuActivity中替换它们).
任何帮助,将不胜感激!感谢你们.
Piw*_*waf 12
好的,在发布我的问题之后很快就开始了.我认为代码中的关键区别在于我将标志"PendingIntent.FLAG_UPDATE_CURRENT"传递给PendingIntent对象的创建/检索.这篇文章帮我弄明白了.
Notification.Builder mBuilder =
new Notification.Builder(context)
.setSmallIcon(R.drawable.notifyicon)
.setContentTitle(title)
.setContentText(extras.getString("message"))
.setAutoCancel(true)
.setOnlyAlertOnce(false)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setVibrate(new long[] {0,500,250,500});
if(badgeCount > 1)
mBuilder.setNumber(badgeCount);
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(context, SiteViewActivity.class);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
resultIntent.putExtra(NOTIFY_INTENT_TYPE_KEY, alertType);
PendingIntent resultPendingIntent = PendingIntent.getActivity(context, alertType, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager notifyMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifyMgr.notify(alertType, mBuilder.build());
Run Code Online (Sandbox Code Playgroud)
首先,您应该android:launchMode="singleTop"在清单文件中添加您的活动定义,如下所示
<activity
android:name="MainActivity"
android:launchMode="singleTop"
</activity>
Run Code Online (Sandbox Code Playgroud)
然后,像哈桑马苏德说,你应该添加Intent.ACTION_MAIN和Intent.CATEGORY_LAUNCHER你的动作像如下
Intent intent = new Intent(this, MainActivity.class);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
Run Code Online (Sandbox Code Playgroud)
就这样.通过这种方式,如果应用程序处于打开状态,当您单击通知时,onNewIntent(..)方法将触发,但无论发生什么,如果应用程序关闭,当您单击通知时,通知意图将转到onCreate(.. )当前活动的方法.
| 归档时间: |
|
| 查看次数: |
9613 次 |
| 最近记录: |