在应用程序中以编程方式启用USB调试(在设置/应用程序/开发下)

Mat*_*adt 9 permissions android android-manifest

是否可以在我的应用程序中以编程方式启用USB调试(在设置/应用程序/开发下)?

我正在查看Permission.WRITE_SETTINGShttp://developer.android.com/reference/android/provider/Settings.System.html,但我找不到合适的东西.

Pau*_*sma 13

您需要root权限才能从应用程序执行此操作.

这就是说,它可以通过执行以下终端命令来启用ADB:

setprop persist.service.adb.enable 1
start adbd
Run Code Online (Sandbox Code Playgroud)

此博客文章提供了一个很好的示例,说明如何通过升级权限执行这些命令su.


Mil*_*nia 6

第一:您的应用必须是系统应用

这行代码可能会有所帮助:

Settings.Global.putInt(getContentResolver(), Global.ADB_ENABLED, 1);

并且您需要此权限:

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

但是在清单中添加此权限后,您会收到此错误: 权限仅授予系统应用程序

这意味着您的应用程序必须是系统应用程序


Mat*_*adt 5

不使用您自己的自定义固件来授予对安全设置的访问权限,这是不可能的。在此处查看主题:http : //groups.google.com/group/android-developers/browse_frm/thread/953c6f0eb0fa9bed#


小智 5

您可以通过在清单中请求 WRITE_SECURE_SETTINGS 并通过 adb shell 授予它来以编程方式启用 adb:

adb shell pm grant your.package.name android.permission.WRITE_SECURE_SETTINGS
Run Code Online (Sandbox Code Playgroud)

然后您可以通过调用在 API 17 及更高版本上启用 adb:

Settings.Global.putString(mContext.getContentResolver, Settings.Global.ADB_ENABLED,"1");
Run Code Online (Sandbox Code Playgroud)

对于 API 16 到 API 3 调用:

Settings.Secure.putString(mContext.getContentResolver, Settings.Secure.ADB_ENABLED,"1");
Run Code Online (Sandbox Code Playgroud)

要禁用 adb,在命令中将“1”替换为“0”