是否可以在我的应用程序中以编程方式启用 USB 调试(在设置/应用程序/开发下)?
我正在查看http://developer.android.com/reference/android/provider/Settings.System.htmlPermission.WRITE_SETTINGS
,
但我找不到任何合适的东西。
是否可以在我的应用程序中以编程方式启用 USB 调试(在设置/应用程序/开发下)?
我正在查看http://developer.android.com/reference/android/provider/Settings.System.htmlPermission.WRITE_SETTINGS
,
但我找不到任何合适的东西。
您将需要 root 权限才能从应用程序执行此操作。
也就是说,可以通过执行以下终端命令来启用 ADB:
setprop persist.service.adb.enable 1
start adbd
这篇博文提供了一个很好的例子,说明如何通过su
.
第一:你的应用必须是系统应用
这行代码可能会有所帮助:
Settings.Global.putInt(getContentResolver(), Global.ADB_ENABLED, 1);
你需要这个权限:
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
但在清单中添加此权限后,您将收到此错误: 权限仅授予系统应用程序
这意味着您的应用程序必须是系统应用程序。
如果不使用您自己的自定义固件来授予对安全设置的访问权限,这是不可能的。在这里查看线程:http ://groups.google.com/group/android-developers/browse_frm/thread/953c6f0eb0fa9bed#
您可以通过在清单中请求 WRITE_SECURE_SETTINGS 并通过 adb shell 授予它来以编程方式启用 adb:
adb shell pm grant your.package.name android.permission.WRITE_SECURE_SETTINGS
然后,您可以通过调用在 API 17 及更高版本上启用 adb:
Settings.Global.putString(mContext.getContentResolver, Settings.Global.ADB_ENABLED,"1");
对于 API 16 到 API 3 调用:
Settings.Secure.putString(mContext.getContentResolver, Settings.Secure.ADB_ENABLED,"1");
要禁用 adb 在命令中将“1”替换为“0”
如果您的设备具有 root 权限,并且启用 adb 的 API 级别 > 17:
Runtime.getRuntime().exec(new String[] {"su", "-c", "settings put global adb_enabled 1"});
或(取决于 su 实现)
Runtime.getRuntime().exec(new String[] {"su", "settings put global adb_enabled 1"});
对于禁用 - 将最后一个参数从 1 更改为 0
你需要遵循这3个步骤
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
Settings.Secure.putInt(requireActivity().contentResolver, Settings.Global.ADB_ENABLED, 1)
或Settings.Secure.putInt(requireActivity().contentResolver, Settings.Global.ADB_ENABLED, 0)
禁用USB 调试adb shell pm grant your.package.name android.permission.WRITE_SECURE_SETTINGS
。设备必须连接到 USB 调试处于活动状态的计算机。我开发了一个简单的应用程序,它使用这种方法来启用/禁用一些开发人员选项,例如调试 USB和保持设备屏幕处于活动 状态 https://play.google.com/store/apps/details?id=it.stzan.devtools
免责声明:我是 DevTools 的实际开发者