/**
* @author vondear
* @date 2016/1/24
*
* 封装Activity相关工具类
*/
public class ActivityTool {
private static StackactivityStack;
/**
* 添加Activity 到栈
*
* @param activity
*/
public static void addActivity(Activity activity) {
if (activityStack ==null) {
activityStack =new Stack<>();
}
activityStack.add(activity);
}
/**
* 获取当前的Activity(堆栈中最后一个压入的)
*/
public static ActivitycurrentActivity() {
Activity activity =activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public static void finishActivity() {
Activity activity =activityStack.lastElement();
}
/**
* 结束指定的Activity
*
* @param activity
*/
public static void finishActivity(Activity activity) {
if (activity !=null) {
activityStack.remove(activity);
activity.finish();
activity =null;
}
}
/**
* 结束指定类名的Activity
*/
public static void finishActivity(Class cls) {
for (Activity activity :activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 结束所有的Activity
*/
public static void finishAllActivity() {
int size =activityStack.size();
for (int i =0; i < size; i++) {
if (null !=activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
public static void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage(context.getPackageName());
System.exit(0);
}catch (Exception e) {
}
}
public static StackgetActivityStack() {
return activityStack;
}
/**
* 判断是否存在指定Activity
*
* @param context 上下文
* @param packageName 包名
* @param className activity全路径类名
* @return {@code true}: 是
{@code false}: 否
*/
public static boolean isExistActivity(Context context, String packageName, 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 context 上下文
* @param packageName 包名
* @param className 全类名
*/
public static void launchActivity(Context context, String packageName, String className) {
launchActivity(context, packageName, className, null);
}
/**
* 打开指定的Activity
*
* @param context 上下文
* @param packageName 包名
* @param className 全类名
* @param bundle bundle
*/
public static void launchActivity(Context context, String packageName, String className, Bundle bundle) {
context.startActivity(RxIntentTool.getComponentNameIntent(packageName, className, bundle));
}
/**
* 要求最低API为11
* Activity 跳转
* 跳转后Finish之前所有的Activity
*
* @param context
* @param goal
*/
public static void skipActivityAndFinishAll(Context context, Class goal, Bundle bundle) {
Intent intent =new Intent(context, goal);
intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
((Activity) context).finish();
}
/**
* 要求最低API为11
* Activity 跳转
* 跳转后Finish之前所有的Activity
*
* @param context
* @param goal
*/
public static void skipActivityAndFinishAll(Context context, Class goal) {
Intent intent =new Intent(context, goal);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
((Activity) context).finish();
}
/**
* Activity 跳转
*
* @param context
* @param goal
*/
public static void skipActivityAndFinish(Context context, Class goal, Bundle bundle) {
Intent intent =new Intent(context, goal);
intent.putExtras(bundle);
context.startActivity(intent);
((Activity) context).finish();
}
/**
* Activity 跳转
*
* @param context
* @param goal
*/
public static void skipActivityAndFinish(Context context, Class goal) {
Intent intent =new Intent(context, goal);
context.startActivity(intent);
((Activity) context).finish();
}
/**
* Activity 跳转
*
* @param context
* @param goal
*/
public static void skipActivity(Context context, Class goal) {
Intent intent =new Intent(context, goal);
context.startActivity(intent);
}
/**
* Activity 跳转
*
* @param context
* @param goal
*/
public static void skipActivity(Context context, Class goal, Bundle bundle) {
Intent intent =new Intent(context, goal);
intent.putExtras(bundle);
context.startActivity(intent);
}
public static void skipActivityForResult(Activity context, Class goal, int requestCode) {
Intent intent =new Intent(context, goal);
context.startActivityForResult(intent, requestCode);
}
public static void skipActivityForResult(Activity context, Class goal, Bundle bundle, int requestCode) {
Intent intent =new Intent(context, goal);
intent.putExtras(bundle);
context.startActivityForResult(intent, requestCode);
}
/**
* 获取launcher activity
*
* @param context 上下文
* @param packageName 包名
* @return launcher activity
*/
public static StringgetLauncherActivity(Context context, String packageName) {
Intent intent =new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PackageManager pm = context.getPackageManager();
List infos = pm.queryIntentActivities(intent, 0);
for (ResolveInfo info : infos) {
if (info.activityInfo.packageName.equals(packageName)) {
return info.activityInfo.name;
}
}
return "no " + packageName;
}
}