編集
この質問に対する答えはコメントで見つけることができます!
役職
私のアプリには、ユーザーが行うべきタスクを思い出させるタイマーがあります。時間切れになると、通知が送信されます。ユーザーがこの通知をクリックすると、アプリがまだフォアグラウンドになっていない場合は、アプリをフォアグラウンドに配置したいと思います。Activity
ここではそうではありませんが、フォアグラウンドに配置する方法を示す多くの投稿を見つけたので、私は「アプリ」を主張します。
通知を送信してアプリをフォアグラウンドにしたいときに呼び出される Broadcastreceiver のコードは次のとおりです。
public class TimerBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int ID = 333;
final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setSmallIcon(R.drawable.clock_alarm2);
builder.setContentTitle("Time is up");
builder.setContentText("SLIMS");
builder.setOnlyAlertOnce(false);
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(uri);
builder.setVibrate(new long[] { 0, 200, 3000 });
ActivityManager activityManager = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);
// get the info from the currently running task
List<ActivityManager.RunningTaskInfo> taskInfo = activityManager.getRunningTasks(100);
for (int i = 0; i < taskInfo.size(); i++) {
String componentName = taskInfo.get(i).topActivity.getClassName();
if (componentName.contains("com.genohm.android")) {
Intent intentActivity = new Intent();
intentActivity.setComponent(taskInfo.get(i).topActivity);
intentActivity.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intentActivity, PendingIntent.FLAG_CANCEL_CURRENT);
builder.setContentIntent(contentIntent);
}
}
final Notification notification = builder.build();
notification.flags |= Notification.FLAG_INSISTENT;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManager mNM = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNM.notify(ID, notification);
}
}
このコードは完全に機能します。問題は、メソッドgetRunningTasks()を使用していることです。このメソッドの使用は、Google によって強く推奨されていないようです。
このような使用はサポートされておらず、将来的に機能しなくなる可能性があります。
しかし、実際には、これまでに見つけた唯一の方法です。この種の慣行に回避策が存在するかどうかは誰にもわかりませんか?