不启动新活动的通知操作?

9

我计划设置一个头部通知,包含两个操作:批准登录请求和拒绝登录请求。当点击任意一个操作时,我希望能够向我的服务器发送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方法需要新的/挂起的Intent。这让我感到困惑,因为我在网上找不到任何例子,其中Intents不会导致启动新的Activity。

我应该如何实现一些代码(可能是一个方法),而不是在每个操作中启动新的Activity?


除非您知道它的作用,否则请不要使用getBaseContext - Eugen Pechanec
1个回答

22

如果您不想启动一个活动,您也可以直接将一个BroadcastReceiver或者Service封装到一个PendingIntent中。

无论您在什么地方构建通知...

您的通知操作将直接启动一个服务。

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)...

Intent iAction1 = new Intent(context, MyService.class);
iAction1.setAction(MyService.ACTION1);
PendingIntent piAction1 = PendingIntent.getService(context, 0, iAction1, PendingIntent.FLAG_UPDATE_CURRENT);

builder.addAction(iconAction1, titleAction1, piAction1);

// Similar for action 2.

MyService.java

IntentService会依次运行在一个工作线程上,一个接一个地进行工作。

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>

1
这是一个非常干净的解决方案 - 应该写入文档中。谢谢。 - Ender2050

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