在命令行可用adb shell am broadcast -a [action] 手动发送广播
首先看一下各部分的作用
adb shell , 进入到设备的shell模式;
am , 是activity manager的缩写,它可以启动activity,启动service,发送广播等
同样的道理 pm ,就是package manager的缩写.
启动一个activity
adb shell am start [option] [intent]
例如:
adb shell am start -a android.settings.ACTION_NAME
adb shell am start -n com.android.settings/.Activity_class_name
参数含义: -a, Action ; -n, Component
例如:打开系统设置
adb shell am start -n com.android.settings/.Activity_class_name
例如:打开系统设置-输入法设置
adb shell am start -a android.settings.INPUT_METHOD_SETTINGS
例如:通过包名+类名开启系统照相机
adb shell am start -n com.android.camera/.Camera
例如:打开拨号界面,直接拨打10086
adb shell am start -a android.intent.action.CALL -d tel:10086
参数含义: -d, DATA_URI
启动一个service
adb shell am startservice [option] [intent]
例如:
adb shell am startservice -a android.settings.ACTION_NAME
adb shell am startservice -n com.android.settings/.Service_class_name
反之,停止service就是把参数换成stopservice
发送一个broadcast
adb shell am broadcast [option] [intent]
例如:发送一个恢复出厂设置的广播
adb shell am broadcast -a android.intent.action.MASTER_CLEAR
例如:模拟手机低电环境
adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei "level" 3 --ei "scale" 100
参数含义: --ei, [EXTRA_KEY, EXTRA_INT_VALUE] int类型键值对
但有时候会出现
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BATTERY_CHANGED from pid=9747, uid=2000
at android.os.Parcel.readException(Parcel.java:1683)
at android.os.Parcel.readException(Parcel.java:1636)
at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3609)
at com.android.commands.am.Am.sendBroadcast(Am.java:772)
at com.android.commands.am.Am.onRun(Am.java:404)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
at com.android.commands.am.Am.main(Am.java:121)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:310)
如果出现上面的错误, 就是没有执行权限,执行adb root, adb remount获取设备权限
强制关闭一个应用程序
adb shell am force-stop [PACKAGE]
例如:通过指定包名强制关闭设置
adb shell am force-stop com.android.settings
列举出所有包含[intent]的包名
adb shell pm list packages [option] [intent]
例如:列举包名含有com.android的package
adb shell pm list packages com.android
上面列举的这些是用的相对比较多一些的命令, 想了解更多adb shell am/pm 的命令或者各参数含义,可以在命令行输入
adb shell am 或 adb shell pm查看.
adb shell am broadcast 手动发送广播及adb shell am/pm其他命令
原文:https://www.cnblogs.com/xgjblog/p/10628079.html