前文:
写这篇文章的初衷其实是这样的,最近想在用户启动 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);
我很好奇为什么会在「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」这样写也可以?
哈哈,其实查看官方可以看到如下说法:
再查看 android 的源码,看到了如下解释:
public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS =
"android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS";
哈哈,好像没有啥需要奇怪的了~
写到这里,其实真的应该结束了,不过却突然对 「adb shell dumpsys」命令有了兴趣,其实这篇文章也只是对 「adb shell dumpsys」命令有了一个引子的作用,下篇文章继续~~~