2

编辑

你可以在评论中找到这个问题的答案!

邮政

在我的应用程序中,我有计时器来提醒用户他应该做的一些任务。时间到了,就会发出通知。当用户单击此通知时,我希望将我的应用程序置于前台(如果还没有的话)。我坚持使用“应用程序”,因为我发现很多帖子都显示了如何将一个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强烈反对

此类用途不受支持,将来可能会中断。

但实际上这是我迄今为止找到的唯一方法。有谁知道这种做法是否存在一些解决方法?

4

0 回答 0