Activity相关→ActivityUtils

   
  import android.app.Activity;
  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;
   
  /**
  * <pre>
  * author: Blankj
  * blog : http://blankj.com
  * time : 2016/9/23
  * desc : Activity相关工具类
  * </pre>
  */
  public final class ActivityUtils {
   
  private ActivityUtils() {
  throw new UnsupportedOperationException("u can't instantiate me...");
  }
   
  /**
  * 判断是否存在Activity
  *
  * @param packageName 包名
  * @param className activity全路径类名
  * @return {@code true}: 是<br>{@code false}: 否
  */
  public static boolean isActivityExists(StringpackageName,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(StringpackageName,String className) {
  launchActivity(packageName, className, null);
  }
   
  /**
  * 打开Activity
  *
  * @param packageName 包名
  * @param className 全类名
  * @param bundle bundle
  */
  public static void launchActivity(StringpackageName,String className, Bundle bundle) {
  Utils.getContext().startActivity(IntentUtils.getComponentIntent(packageName, className, bundle));
  }
   
  /**
  * 获取launcher activity
  *
  * @param packageName 包名
  * @return launcher activity
  */
  public static String getLauncherActivity(StringpackageName) {
  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<ResolveInfo> 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");
  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;
  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值