9

ログイン要求を承認するアクションと、ログイン要求を拒否するアクションの 2 つのアクションを持つヘッドアップ通知を作成する予定です。これらのアクションのいずれかをクリックすることで、サーバーに HTTP リクエストを送信したいと考えています。最も重要なことは、新しいアクティビティを開始したり、ユーザーをアプリにリダイレクトしたりしたくないということです。

        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 メソッドが new/pendingIntent を探しているようです。インテントが新しいアクティビティの起動につながらない例をオンラインで見つけることができないため、混乱しています。

各アクションで新しいアクティビティを開始するのではなく、コード (おそらくメソッド) を実装するにはどうすればよいですか?

4

1 に答える 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>
于 2016-04-05T18:10:34.303 に答える