Android将后台应用唤起到前台,唤醒APP;
16lz
2021-01-25
包名启动即可:
Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());context.startActivity(intent);
只针对于从通知栏唤醒应用,无需启动新的Activity ;
如果在后台是无法唤醒的,Android8.0对后台启动做了限制;https://developer.android.google.cn/about/versions/oreo/background?hl=zh_cn
走的弯路:
/** * 唤醒APP * @param context */ public static void rouseApp(Context context) { if (BaseApplication.get().getTopActivity() != null) { Intent intent = new Intent(context, BaseApplication.get().getTopActivity().getClass()); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); context.startActivity(intent); }else { Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); context.startActivity(intent); } }
public class BaseApplication extends Application { private static Stack activityStack; private static BaseApplication instance; public static BaseApplication get() { return instance; } @Override public void onCreate() { super.onCreate(); instance = this; initActivityStack(); } /** * 获取当前APP中Activity正在显示的数量 * 可用于判断APP处于前台还是后台 * * @return */ public static Integer getActivityStackCount() { return mActivityCount; } private static int mActivityCount = 0; private void initActivityStack() { registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { addActivity(activity); } @Override public void onActivityStarted(Activity activity) { mActivityCount++; } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { mActivityCount--; } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { finishActivity(activity); } }); } /** * 添加Activity到堆栈 */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<>(); } activityStack.add(activity); } public Activity getActivity(Class<?> cls) { if (activityStack == null) return null; if (activityStack.isEmpty()) return null; for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { return activity; } } return null; } /** * 移除指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity = null; } } /** * 结束指定类名的Activity */ public void finishActivity(Class<?>... clses) { for (Class<?> cls : clses) { Iterator iterator = activityStack.iterator(); while (iterator.hasNext()) { Activity activity = iterator.next(); if (activity.getClass().equals(cls)) { iterator.remove(); activity.finish(); } } } } /** * 结束除参数外的所有activity * * @param clses */ public void finishAllOther(Class<?>... clses) { Iterator iterator = activityStack.iterator(); while (iterator.hasNext()) { Activity activity = iterator.next(); final Class actCls = activity.getClass(); boolean finish = true; for (Class<?> cls : clses) { if (null == cls) continue; if (actCls.equals(cls)) { finish = false; break; } } if (finish) { iterator.remove(); activity.finish(); } } } /** * 结束所有Activity */ public void finishAllActivity() { Iterator iterator = activityStack.iterator(); while (iterator.hasNext()) { Activity activity = iterator.next(); iterator.remove(); activity.finish(); } } public void finishiTopActivity() { final int size = activityStack.size(); if (size > 1) { activityStack.get(size - 1).finish(); } } public Activity getTopActivity() { if (activityStack.isEmpty()) return null; final int size = activityStack.size(); if (size >= 1) { return activityStack.get(size - 1); } else { return null; } } /** * 判断某Activity是否在栈中 * * @param cls * @return */ public boolean isExist(Class<?> cls) { if (activityStack == null) return false; if (activityStack.isEmpty()) return false; for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { return true; } } return false; } /** * 退出应用程序 */ public void AppExit() { finishAllActivity(); }}
更多相关文章
- 如何在后台运行Linux命令?
- Android(安卓)Intent 常用的Flag
- android resoult A>B 结束B A显示B中的内容
- Android(安卓)关于ObjectAnimator 的几种状态
- Android(安卓)Service之串行化Service:IntentService(系列3)
- 【Android】点击应用进而打开base.apk的调用流程再分析
- Android:监听应用前后台切换及思考
- Android(安卓)app前后台切换监听
- android监听视频播放结束