AndroidUtils(二)Activity管理类

xiaoxiao2021-02-28  106

看注解;

看注解;

看注解;

package com.example.bandofbrotherszts.androidphoneinfo; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Build; import android.os.Bundle; import android.support.annotation.AnimRes; import android.support.annotation.NonNull; import android.support.v4.util.ArrayMap; import java.lang.reflect.Field; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Stack; /** * 应用程序Activity管理类 */ public class ActivityManager { private static Stack activityStack; private static ActivityManager instance = null; private static Context context ; private ActivityManager() { } /** * 单例 */ public static ActivityManager getAppManager(Context mcontext) { if (instance == null) { instance = new ActivityManager(); } context = mcontext.getApplicationContext(); return instance; } /** * 添加Activity到堆栈 */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<>(); } activityStack.add(activity); } /** * 获取当前Activity(堆栈种最后一个压入的) */ public Activity currentActivity() { Activity activity = activityStack.lastElement(); return activity; } /** * 结束当前Activity */ public void finishActivity() { Activity activity = activityStack.lastElement(); if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } } /** * 结束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } } /** * 结束指定类名的Activity */ public void finishActivity(Class cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } } /** * 结束指定位置的Activity */ public void finishPositionActivity(int index) { Activity activity = activityStack.get(index); finishActivity(activity); } /** * 结束所有Activity */ public void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i)) { activityStack.get(i).finish(); } } activityStack.clear(); } /** * 判断是否存在Activity * * @param packageName 包名 * @param className activity全路径类名 * @return {@code true}: 是 {@code false}: 否 */ public boolean isActivityExists(@NonNull final String packageName, @NonNull final String className) { Intent intent = new Intent(); intent.setClassName(packageName, className); return !(context.getPackageManager().resolveActivity(intent, 0) == null || intent.resolveActivity(context.getPackageManager()) == null || context.getPackageManager().queryIntentActivities(intent, 0).size() == 0); } /** * 启动Activity * * @param cls activity类 */ public void startActivity(@NonNull final Class cls) { startActivity(context, null, context.getPackageName(), cls.getName(), null); } /** * 启动Activity * * @param cls activity类 * @param options 跳转动画 */ public void startActivity(@NonNull final Class cls, @NonNull final Bundle options) { startActivity(context, null, context.getPackageName(), cls.getName(), options); } /** * 启动Activity * * @param activity activity * @param cls activity类 */ public void startActivity(@NonNull final Activity activity, @NonNull final Class cls) { startActivity(activity, null, activity.getPackageName(), cls.getName(), null); } /** * 启动Activity * * @param activity activity * @param cls activity类 * @param options 跳转动画 */ public void startActivity(@NonNull final Activity activity, @NonNull final Class cls, @NonNull final Bundle options) { startActivity(activity, null, activity.getPackageName(), cls.getName(), options); } /** * 启动Activity * * @param activity activity * @param cls activity类 * @param enterAnim 入场动画 * @param exitAnim 出场动画 */ public void startActivity(@NonNull final Activity activity, @NonNull final Class cls, @AnimRes final int enterAnim, @AnimRes final int exitAnim) { startActivity(activity, null, activity.getPackageName(), cls.getName(), null); activity.overridePendingTransition(enterAnim, exitAnim); } /** * 启动Activity * * @param extras extras * @param cls activity类 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Class cls) { startActivity(context, extras, context.getPackageName(), cls.getName(), null); } /** * 启动Activity * * @param extras extras * @param cls activity类 * @param options 跳转动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Class cls, @NonNull final Bundle options) { startActivity(context, extras, context.getPackageName(), cls.getName(), options); } /** * 启动Activity * * @param extras extras * @param activity activity * @param cls activity类 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final Class cls) { startActivity(activity, extras, activity.getPackageName(), cls.getName(), null); } /** * 启动Activity * * @param extras extras * @param activity activity * @param cls activity类 * @param options 跳转动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final Class cls, @NonNull final Bundle options) { startActivity(activity, extras, activity.getPackageName(), cls.getName(), options); } /** * 启动Activity * * @param extras extras * @param activity activity * @param cls activity类 * @param enterAnim 入场动画 * @param exitAnim 出场动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final Class cls, @AnimRes final int enterAnim, @AnimRes final int exitAnim) { startActivity(activity, extras, activity.getPackageName(), cls.getName(), null); activity.overridePendingTransition(enterAnim, exitAnim); } /** * 启动Activity * * @param pkg 包名 * @param cls 全类名 */ public void startActivity(@NonNull final String pkg, @NonNull final String cls) { startActivity(context, null, pkg, cls, null); } /** * 启动Activity * * @param pkg 包名 * @param cls 全类名 * @param options 动画 */ public void startActivity(@NonNull final String pkg, @NonNull final String cls, @NonNull final Bundle options) { startActivity(context, null, pkg, cls, options); } /** * 启动Activity * * @param activity activity * @param pkg 包名 * @param cls 全类名 */ public void startActivity(@NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls) { startActivity(activity, null, pkg, cls, null); } /** * 启动Activity * * @param activity activity * @param pkg 包名 * @param cls 全类名 * @param options 动画 */ public void startActivity(@NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls, @NonNull final Bundle options) { startActivity(activity, null, pkg, cls, options); } /** * 启动Activity * * @param activity activity * @param pkg 包名 * @param cls 全类名 * @param enterAnim 入场动画 * @param exitAnim 出场动画 */ public void startActivity(@NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls, @AnimRes final int enterAnim, @AnimRes final int exitAnim) { startActivity(activity, null, pkg, cls, null); activity.overridePendingTransition(enterAnim, exitAnim); } /** * 启动Activity * * @param extras extras * @param pkg 包名 * @param cls 全类名 */ public void startActivity(@NonNull final Bundle extras, @NonNull final String pkg, @NonNull final String cls) { startActivity(context, extras, pkg, cls, null); } /** * 启动Activity * * @param extras extras * @param pkg 包名 * @param cls 全类名 * @param options 动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final String pkg, @NonNull final String cls, @NonNull final Bundle options) { startActivity(context, extras, pkg, cls, options); } /** * 启动Activity * * @param activity activity * @param extras extras * @param pkg 包名 * @param cls 全类名 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls) { startActivity(activity, extras, pkg, cls, null); } /** * 启动Activity * * @param extras extras * @param activity activity * @param pkg 包名 * @param cls 全类名 * @param options 动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls, @NonNull final Bundle options) { startActivity(activity, extras, pkg, cls, options); } /** * 启动Activity * * @param extras extras * @param pkg 包名 * @param cls 全类名 * @param enterAnim 入场动画 * @param exitAnim 出场动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls, @AnimRes final int enterAnim, @AnimRes final int exitAnim) { startActivity(activity, extras, pkg, cls, null); activity.overridePendingTransition(enterAnim, exitAnim); } private void startActivity(final Context context, final Bundle extras, final String pkg, final String cls, final Bundle options) { Intent intent = new Intent(Intent.ACTION_VIEW); if (extras != null) intent.putExtras(extras); intent.setComponent(new ComponentName(pkg, cls)); if (!(context instanceof Activity)) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } if (options != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { context.startActivity(intent, options); } else { context.startActivity(intent); } } /** * 退出应用程序 */ public void appExit(Context context) { try { finishAllActivity(); // ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); // manager.killBackgroundProcesses(context.getPackageName()); System.exit(0); android.os.Process.killProcess(android.os.Process.myPid()); }catch (Exception e){ e.printStackTrace(); } } /** * 获取栈顶Activity * * @return 栈顶Activity */ public Activity getTopActivity() { try { Class activityThreadClass = Class.forName("android.app.ActivityThread"); Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null); Field activitiesField = activityThreadClass.getDeclaredField("mActivities"); activitiesField.setAccessible(true); Map activities; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { activities = (HashMap) activitiesField.get(activityThread); } else { activities = (ArrayMap) activitiesField.get(activityThread); } for (Object activityRecord : activities.values()) { Class activityRecordClass = activityRecord.getClass(); Field pausedField = activityRecordClass.getDeclaredField("paused"); pausedField.setAccessible(true); if (!pausedField.getBoolean(activityRecord)) { Field activityField = activityRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); return (Activity) activityField.get(activityRecord); } } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 获取launcher activity * * @param packageName 包名 * @param context 上下文 * @return launcher activity */ public String getLauncherActivity( Context context, String packageName) { Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PackageManager pm = context.getPackageManager(); List info = pm.queryIntentActivities(intent, 0); for (ResolveInfo aInfo : info) { if (aInfo.activityInfo.packageName.equals(packageName)) { return aInfo.activityInfo.name; } } return "no " + packageName; } } 点击下载源码

转载请注明原文地址: https://www.6miu.com/read-44907.html

最新回复(0)