我有一个与在Android中使用附加操作创建通知相关的问题。我的目标是让一个动作不会重新打开我的应用程序,但只会执行我的应用程序中的类所指定的逻辑。这是我创建所述通知的代码。
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(context, RetryReceiver.class);
final PendingIntent retryIntent = PendingIntent.getBroadcast(context, notificationId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
final NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setTicker(ticker)
.setContentText(message)
.setSmallIcon(R.drawable.notifcation_sprout_leaf)
.setLargeIcon(largeIcon)
.setAutoCancel(true);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
mNotifyBuilder.addAction(R.drawable.refresh_action_bar, "Retry", retryIntent);
}
// Creates an explicit intent for an Activity in your app
Intent mainIntent = new Intent(context, MainActivity.class);
// The TaskStackBuilder needs multiple intents in case there are multiple failures in succession
// Thus default it to have a MainActivity intent it can fall back on
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntent(mainIntent);
stackBuilder.addNextIntent(composeIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(notificationId, PendingIntent.FLAG_UPDATE_CURRENT);
mNotifyBuilder.setContentIntent(resultPendingIntent);
// Because the ID remains unchanged, the existing notification is updated.
notificationManager.notify(notificationId, mNotifyBuilder.build());
以下是接收广播的班级:
public class RetryReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
// do shit
}
}
我还在AndroidManifest.xml中注册了接收器:
<receiver
android:name=".RetryReceiver"
android:enabled="true"
android:exported="true" >
</receiver>
出于某种原因,我的接收器中的代码永远不会被解雇,任何人都有任何建议吗?
答案 0 :(得分:1)
您需要在setContentIntent(retryIntent)
上致电mNotifyBuilder
- 它未自动设置。
答案 1 :(得分:1)
属性android:exported="true"
是指广播接收者从其应用程序之外的来源接收消息。
缺少任何过滤器意味着只能由指定其确切类名的Intent对象调用它。这意味着接收器仅用于仅供应用程序内部使用。
因此android:exported
应声明为android:exported="false"
或未声明,因为在这种情况下默认为false。
因为我看不到你的代码没有其他问题。请尝试使用android:exported="false"