我计划有一个抬头通知,其中包含两个操作…一个用于批准登录请求,另一个用于拒绝登录请求.通过单击这些操作中的任何一个,我希望触发对我的服务器的HTTP请求,最重要的是,不希望启动新的Activity或让用户重定向到我的应用程序.
Context context = getBaseContext(); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.mipmap.notificationicon) .setContentTitle(notificationTitle) .setContentText("Access Request for " + appName + " : " + otp) .setDefaults(Notification.DEFAULT_ALL) .setPriority(NotificationCompat.PRIORITY_HIGH) .addAction(R.drawable.ic_tick,"Approve",someApproveIntent? );
这是我的通知构建器,在查看之后,似乎addAction方法正在寻找新的/ pendingIntent,这让我感到困惑,因为我无法在线找到任何Intents不会导致新活动被触发的示例.
我将如何实现一些代码(可能是一种方法),而不是在每个动作上启动一个新的Activity …
谢谢你的帮助
解决方法
如果您不想启动活动,还可以直接在PendingIntent中包装BroadcastReceiver或Service.
无论您在何处构建通知……
您的通知操作将直接启动服务.
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)... Intent iAction1 = new Intent(context,MyService.class); iAction1.setAction(MyService.ACTION1); PendingIntent piAction1 = PendingIntent.getService(context,iAction1,PendingIntent.FLAG_UPDATE_CURRENT); builder.addAction(iconAction1,titleAction1,piAction1); // Similar for action 2.
MyService.java
IntentServices一个接一个地连续运行.他们在工作线程上完成工作.
public class MyService extends IntentService { public static final String ACTION1 = "ACTION1"; public static final String ACTION2 = "ACTION2"; @Override public void onHandleIntent(Intent intent) { final String action = intent.getAction(); if (ACTION1.equals(action)) { // do stuff... } else if (ACTION2.equals(action)) { // do some other stuff... } else { throw new IllegalArgumentException("Unsupported action: " + action); } } }
AndroidManifest.xml中
不要忘记在清单中注册服务.
<manifest> <application> <service android:name="path.to.MyService" android:exported="false"/> </application> </manifest>