Android Developer 的正确姿势之获得手机当前界面的 Activity 的名称

前文:
写这篇文章的初衷其实是这样的,最近想在用户启动 APP 时,引导用户进入系统的设置界面,于是我在网上看到了这段代码:

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if(Build.VERSION.SDK_INT >= 9){
     intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
     intent.setData(Uri.fromParts("package", mContext.getPackageName(), null));
} else if(Build.VERSION.SDK_INT <= 8){
     intent.setAction(Intent.ACTION_VIEW);
     intent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
     intent.putExtra("com.android.settings.ApplicationPkgName", mContext.getPackageName());
}
startActivity(intent);
Android Developer 的正确姿势之获得手机当前界面的 Activity 的名称_第1张图片
设置界面,这里以「微信」为例.png

我很好奇为什么会在「intent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");」这段代码中这么写?同时又受到这篇文章的启发,就想玩玩「adb shell dumpsys」命令,毕竟代码的一大禁忌就是「功能实现了,但是写的不明不白」~

好了,正文来了

注:下面所有的命令都需要在数据线连接手机的情况下进行,检测是否连接成功的最好方法就是看 Android Studio 的 「Connected Devices」是否正常显示了~

捕捉当前的 activity 「即,当前通过 USB 连接电脑的手机的界面上显示『onResume』的 Activity 的信息」:

在命令行窗口输入如下内容:

adb shell dumpsys activity top

输出:

TASK null id=488
  ACTIVITY com.android.settings/.applications.InstalledAppDetails 955e010 pid=13576
    Local Activity d7e4b34 State:
      mResumed=false mStopped=true mFinished=false
      mChangingConfigurations=false
      mCurrentConfig={1.0 460mcc2mnc en_US ldltr sw360dp w360dp h616dp 480dpi nrml long port finger -keyb/v/h -nav/h s.13 themeId=0, affectGlobal:true}
      mLoadersStarted=true
      Active Fragments in 517189:
        #0: InstalledAppDetails{c3b458e #0 id=0x7f120256}
        「省略一堆代码」
    ViewRoot:
      mAdded=true mRemoved=false
      mConsumeBatchedInputScheduled=false
  「省略一些代码」
    View Hierarchy:
      com.android.internal.policy.PhoneWindow$DecorView{fee7866 V.E...... R....... 0,0-1080,1920}
「省略大部分代码,这部分代码的主要说明内容当前的 Activity 的 View 的层级关系」
    Looper (main, tid 1) {6faf70a}
      (Total messages: 0, polling=false, quitting=false)

其实最想知道的内容已经知道了
「 ACTIVITY com.android.settings/.applications.InstalledAppDetails」

写道这里其实应该结束了,但是你没有奇怪的地方吗?为毛「android.settings.APPLICATION_DETAILS_SETTINGS」这样写也可以?
哈哈,其实查看官方可以看到如下说法:

官方网站截图.png

再查看 android 的源码,看到了如下解释:

 public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS =
            "android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS";

哈哈,好像没有啥需要奇怪的了~

写到这里,其实真的应该结束了,不过却突然对 「adb shell dumpsys」命令有了兴趣,其实这篇文章也只是对 「adb shell dumpsys」命令有了一个引子的作用,下篇文章继续~~~

参考文章:
使用adb shell dumpsys检测Android的Activity任务栈

你可能感兴趣的:(Android Developer 的正确姿势之获得手机当前界面的 Activity 的名称)