AndroidUtils(二)Activity管理类

来源:互联网 发布:mac上将pdf转换成txt 编辑:程序博客网 时间:2024/06/05 17:31

看注解;

看注解;

看注解;

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; }}
点击下载源码

原创粉丝点击