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 StackactivityStack; 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(); Listinfo = pm.queryIntentActivities(intent, 0); for (ResolveInfo aInfo : info) { if (aInfo.activityInfo.packageName.equals(packageName)) { return aInfo.activityInfo.name; } } return "no " + packageName; }}
点击下载源码
阅读全文
1 0
- AndroidUtils(二)Activity管理类
- AndroidUtils(三)时间工具类
- AndroidUtils(六)SP工具类
- AndroidUtils一些类方法
- AndroidUtils之FontUtils字体工具类
- AMS 深入了解(二、Activity管理)(and5.1)
- Android解析ActivityManagerService(二)ActivityTask和Activity栈管理
- android activity管理(二)之Activity(ActivityClientRecord)生命周期管理
- android Activity管理类(全局管理Activity)
- android Activity管理类(全局管理Activity)
- android Activity管理类(全局管理Activity)
- AndroidUtils(四)Crash异常捕获输出文件
- android ActivityManagerService 源码分析----Activity管理(二)
- android ActivityManagerService 源码分析----Activity管理(二)
- android ActivityManagerService 源码分析----Activity管理(二)
- AppManager Activity管理类
- activity活动管理类
- Activity管理类
- Unity NGUI实现技能冷却
- 低功耗广域网络:加速物联网从“炒作”转向落地
- 欢迎使用CSDN-markdown编辑器
- lintcode-二叉树中查找区间
- python3.5在windows 2008安装报错解决办法
- AndroidUtils(二)Activity管理类
- mango
- 应用导向将是物联网低功耗广域网络主流模式
- Android图片加载框架最全解析(四),玩转Glide的回调与监听
- Android设计模式之(17)----代理模式
- Quartz总结
- 字体加载三种方式
- 前后台交互
- 设计模式的应用场景(22)--迭代器模式