android监听应用缓存和任务栈顶的方法
来源:互联网 发布:头戴式蓝牙推荐 知乎 编辑:程序博客网 时间:2024/05/18 20:07
控制背景音乐,要做到用户点击home键或者当前屏幕显示的程序不是自己的程序的时候。音乐暂停。回到程序后继续播放。遇到多机型的问题。有些手机有多任务键。有些没有。如果只监听任务栈,在没有多任务键的手机的确可以做到,在有多任务键的系统中,点击home键栈顶还是自己的程序,并没有跳到桌面的程序去。原因也没有去了解。
好在有几个热心的同行帮忙想办法才找到解决的方式。
下面就把代码粘贴。以便自己以后记录
主要方法就是写一个基类。让所有activity继承。并且在生命周期进行控制
/** * 判断当前应用程序处于任务栈顶 */ public static boolean isApplicationBroughtToBackground(final Context context) {ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);List<RunningTaskInfo> tasks = am.getRunningTasks(1);if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; if (!topActivity.getPackageName().equals(context.getPackageName())) {return true; }}return false; }
/** * 判断程序是否在缓存顶部 * @param context * @return */ public static boolean isAppOnForeground(Context context) {ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);String packageName = context.getPackageName();List<RecentTaskInfo> appTask = activityManager.getRecentTasks(5, 0x0002);if (appTask != null) {if (appTask.get(0).baseIntent.toString().contains(packageName)) { return true;}}return false; }
.
/** * 启动activity,如果该activity已经启动,则直接打开;如果该activity没有启动,则从新启动. * 一般用于状态栏点击进入程序时使用. * * @param context * @param cls 被启动的activity */ public static Intent startTaskIntent(Context context, Class<?> cls) { if (android.os.Build.VERSION.SDK_INT >= 21) { return startNewApiTaskIntent(context, cls); } else { return startOldApiTaskIntent(context, cls); } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private static Intent startNewApiTaskIntent(Context context, Class<?> cls) { final PackageManager pm = context.getPackageManager(); final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.AppTask> appTasks = am.getAppTasks(); for (ActivityManager.AppTask task : appTasks) { final ActivityManager.RecentTaskInfo info = task.getTaskInfo(); Intent intent = new Intent(info.baseIntent); if (info.origActivity != null) { intent.setComponent(info.origActivity); } final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0); if (resolveInfo != null) { final ActivityInfo activityInfo = resolveInfo.activityInfo; if (TextUtils.equals(activityInfo.packageName, context.getPackageName())) { return intent; } } } Intent intent = new Intent(context, cls); intent.setFlags((intent.getFlags() & ~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) | Intent.FLAG_ACTIVITY_NEW_TASK); return intent; } private static Intent startOldApiTaskIntent(Context context, Class<?> cls) { final PackageManager pm = context.getPackageManager(); final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); final List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasks(20, 0x0002); for (ActivityManager.RecentTaskInfo info : recentTasks) { Intent intent = new Intent(info.baseIntent); if (info.origActivity != null) { intent.setComponent(info.origActivity); } final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0); if (resolveInfo != null) { final ActivityInfo activityInfo = resolveInfo.activityInfo; if (TextUtils.equals(activityInfo.packageName, context.getPackageName())) { context.startActivity(intent); return intent; } } } Intent intent = new Intent(context, cls); intent.setFlags((intent.getFlags() & ~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) | Intent.FLAG_ACTIVITY_NEW_TASK); return intent; }
0 0
- android监听应用缓存和任务栈顶的方法
- Android获取栈顶的应用包名
- 74获取任务栈顶的Activity
- <android>清除应用缓存的方法
- Android任务栈的四种模式和应用场景
- Android监听Home键和最近任务
- Android 应用监听后台切换前台的方法
- Android应用数据、缓存的清除和获取缓存大小
- 安卓让自己的应用处在栈顶
- android ListView 应用及事件监听方法
- Android应用监听来电、短信等方法
- Android的任务栈以及应用场景
- android获取当前运行的栈顶的应用包名
- android获取当前正在运行的栈顶的应用包名
- android获取当前正在运行的栈顶的应用包名
- android 5.0 以上获取栈顶应用包名以及程序锁的实现
- “自顶向下,逐步求精”的概念和应用
- Android中检查、监听电量和充电状态的方法
- HDU 1500 Chopsticks(动态规划)
- 基础篇——数论基础
- POJ 2251Dungeon Master
- Web Uploader图片上传 java实现
- VC6.0工程设置
- android监听应用缓存和任务栈顶的方法
- java设计模式:观察者模式实例详解(基于java内置观察者)
- 对单一职责原则的理解
- Method Swizzling(iOS的hook机制)
- 用js根据当前季度获取上一季度
- 查看Linux内核源码技巧的记录
- android中的提示方法
- 正则表达式不以某字符串结尾
- MySQL面试题目