Activity相关工具类
16lz
2021-01-26
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.os.Bundle;
import android.util.ArrayMap;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public final class ActivityUtils {
private ActivityUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}
/**
* 判断是否存在Activity
*
* @param packageName 包名
* @param className activity全路径类名
* @return {@code true}: 是
{@code false}: 否
*/
public static boolean isActivityExists(String packageName, String className) {
Intent intent = new Intent();
intent.setClassName(packageName, className);
return !(Utils.getContext().getPackageManager().resolveActivity(intent, 0) == null ||
intent.resolveActivity(Utils.getContext().getPackageManager()) == null ||
Utils.getContext().getPackageManager().queryIntentActivities(intent, 0).size() == 0);
}
/**
* 打开Activity
*
* @param packageName 包名
* @param className 全类名
*/
public static void launchActivity(String packageName, String className) {
launchActivity(packageName, className, null);
}
/**
* 打开Activity
*
* @param packageName 包名
* @param className 全类名
* @param bundle bundle
*/
public static void launchActivity(String packageName, String className, Bundle bundle) {
Utils.getContext().startActivity(getComponentIntent(packageName, className, bundle));
}
/**
* 获取launcher activity
*
* @param packageName 包名
* @return launcher activity
*/
public static String getLauncherActivity(String packageName) {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PackageManager pm = Utils.getContext().getPackageManager();
List infos = pm.queryIntentActivities(intent, 0);
for (ResolveInfo info : infos) {
if (info.activityInfo.packageName.equals(packageName)) {
return info.activityInfo.name;
}
}
return "no " + packageName;
}
/**
* 获取栈顶Activity
*
* @return 栈顶Activity
*/
public static Activity getTopActivity() {
try {
Class activityThreadClass = Class.forName("android.app.ActivityThread");
@SuppressWarnings("unchecked")
Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
activitiesField.setAccessible(true);
Map activities = null;
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;
}
private static Intent getComponentIntent(String packageName, String className, Bundle bundle) {
Intent intent = new Intent(Intent.ACTION_VIEW);
if (bundle != null) intent.putExtras(bundle);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
return intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
}
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.os.Bundle;
import android.util.ArrayMap;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public final class ActivityUtils {
private ActivityUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}
/**
* 判断是否存在Activity
*
* @param packageName 包名
* @param className activity全路径类名
* @return {@code true}: 是
{@code false}: 否
*/
public static boolean isActivityExists(String packageName, String className) {
Intent intent = new Intent();
intent.setClassName(packageName, className);
return !(Utils.getContext().getPackageManager().resolveActivity(intent, 0) == null ||
intent.resolveActivity(Utils.getContext().getPackageManager()) == null ||
Utils.getContext().getPackageManager().queryIntentActivities(intent, 0).size() == 0);
}
/**
* 打开Activity
*
* @param packageName 包名
* @param className 全类名
*/
public static void launchActivity(String packageName, String className) {
launchActivity(packageName, className, null);
}
/**
* 打开Activity
*
* @param packageName 包名
* @param className 全类名
* @param bundle bundle
*/
public static void launchActivity(String packageName, String className, Bundle bundle) {
Utils.getContext().startActivity(getComponentIntent(packageName, className, bundle));
}
/**
* 获取launcher activity
*
* @param packageName 包名
* @return launcher activity
*/
public static String getLauncherActivity(String packageName) {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PackageManager pm = Utils.getContext().getPackageManager();
List
for (ResolveInfo info : infos) {
if (info.activityInfo.packageName.equals(packageName)) {
return info.activityInfo.name;
}
}
return "no " + packageName;
}
/**
* 获取栈顶Activity
*
* @return 栈顶Activity
*/
public static Activity getTopActivity() {
try {
Class activityThreadClass = Class.forName("android.app.ActivityThread");
@SuppressWarnings("unchecked")
Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
activitiesField.setAccessible(true);
Map activities = null;
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;
}
private static Intent getComponentIntent(String packageName, String className, Bundle bundle) {
Intent intent = new Intent(Intent.ACTION_VIEW);
if (bundle != null) intent.putExtras(bundle);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
return intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
}
更多相关文章
- Android(安卓)listview--checkbox
- android反射获取资源
- android图片异步加载到本地
- Android(安卓)获取本地图片
- 实用正则表达式扫描android SDcard的文件
- android获取手机通讯录
- Android中常用工具类
- 获取sd卡容量
- 47 Android(安卓)fragment 接口回调