首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ActivityManager.getRunningTasks不受欢迎

ActivityManager.getRunningTasks不受欢迎
EN

Stack Overflow用户
提问于 2015-07-01 08:32:37
回答 6查看 38.9K关注 0票数 23

我正在使用下面的方法来显示通知,但问题是,现在ActivityManager.getRunningTasks(1);被废弃了。从一个堆栈溢出的问题中,我读到:“您可以使用getAppTasks()返回一个List<AppTask>,在那里您可以用getTaskInfo获取RecentTaskInfo”,但我想不出如何使用它。请在这方面帮助我。

代码语言:javascript
运行
复制
private void postNotification(Context ctx, Intent intent) {
        try {
            if (intent == null) {
                Log.d(TAG, "Receiver intent null");
            } else {
                String action = intent.getAction();
                if (action.equals("com.ziza.cy.UPDATE_STATUS")) {

                    JSONObject json = new JSONObject(intent.getExtras()
                            .getString("com.parse.Data"));

                    String type = json.getString("type");

                    if (type.equals("AlertNotification")) {

                        String msg = json.getString("header");
                        String title = "ncy";

                        ActivityManager am = (ActivityManager) ctx
                                .getSystemService(Context.ACTIVITY_SERVICE);
                        List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
                        ComponentName componentInfo = taskInfo.get(0).topActivity;

                        // don't show notification if app is in foreground
                        if (componentInfo.getPackageName().equalsIgnoreCase(
                                ctx.getPackageName())) {

                            // send broadcast receiver
                            Intent intentBroad = new Intent();
                            intentBroad.setAction(Constants.sNOTIFICATION);
                            intentBroad.putExtra("msg", msg);
                            intentBroad.putExtra("title", title
                                    + " "
                                    + taskInfo.get(0).topActivity.getClass()
                                            .getSimpleName());
                            ctx.sendBroadcast(intentBroad);
                        } else {
                            // Activity Not Running
                            // Generate Notification

                            Intent intnt = new Intent(ctx, LogInActivity.class);
                            PendingIntent contentIntent = PendingIntent
                                    .getActivity(ctx, 0, intnt, 0);
                            intnt.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                    | Intent.FLAG_ACTIVITY_NEW_TASK);

                            NotificationCompat.Builder builder = new NotificationCompat.Builder(
                                    ctx)
                                    .setContentTitle(title)
                                    .setContentText(msg)
                                    .setTicker(msg)
                                    .setSound(
                                            RingtoneManager
                                                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                                    .setStyle(
                                            new NotificationCompat.BigTextStyle()
                                                    .bigText(msg))
                                    .setAutoCancel(true)
                                    .setSmallIcon(R.drawable.iconed)
                                    .setOnlyAlertOnce(true)
                                    .setDefaults(Notification.DEFAULT_VIBRATE);

                            Uri alarmSound = RingtoneManager
                                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                            builder.setSound(alarmSound);
                            builder.setContentIntent(contentIntent);
                            NotificationManager notificationManager = (NotificationManager) ctx
                                    .getSystemService(Context.NOTIFICATION_SERVICE);

                            notificationManager.notify(0, builder.build());

                        }
                    }
                }
            }

        } catch (JSONException e) {
            Log.d(TAG, "JSONException: " + e.getMessage());
        }
    }
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-07-01 08:45:21

这应该能帮你开始

代码语言:javascript
运行
复制
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> tasks = activityManager.getAppTasks();

for (ActivityManager.AppTask task : tasks) {
    Log.d(TAG, "stackId: " + task.getTaskInfo().stackId);
}
票数 20
EN

Stack Overflow用户

发布于 2016-02-16 04:49:47

--这应该适用于以前的Lollipop设备以及Lollipop设备

代码语言:javascript
运行
复制
public static boolean isBackgroundRunning(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                for (String activeProcess : processInfo.pkgList) {
                    if (activeProcess.equals(context.getPackageName())) {
                        //If your app is the process in foreground, then it's not in running in background
                        return false;
                    }
                }
            }
        }


        return true;
    }

编辑:如果应用程序处于后台,它应该返回true,而不是相反。

票数 45
EN

Stack Overflow用户

发布于 2015-09-09 06:12:31

希望你能这么做:

代码语言:javascript
运行
复制
/***
 * Checking Whether any Activity of Application is running or not
 * @param context
 * @return
 */
public static boolean isForeground(Context context) {

    // Get the Activity Manager
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    // Get a list of running tasks, we are only interested in the last one,
    // the top most so we give a 1 as parameter so we only get the topmost.
    List<ActivityManager.RunningAppProcessInfo> task = manager.getRunningAppProcesses();

    // Get the info we need for comparison.
    ComponentName componentInfo = task.get(0).importanceReasonComponent;

    // Check if it matches our package name.
    if(componentInfo.getPackageName().equals(context.getPackageName()))
        return true;

    // If not then our app is not on the foreground.
    return false;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31156313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档