是否可以在我的应用程序中以编程方式启用USB调试(在设置/应用程序/开发下)?
我在看Permission.WRITE_SETTINGS
和
http://developer.android.com/reference/android/provider/Settings.System.html,
但我找不到合适的东西。
答案 0 :(得分:13)
您需要root权限才能从应用中执行此操作。
也就是说, 可以通过执行以下终端命令来启用ADB:
setprop persist.service.adb.enable 1
start adbd
This blog post提供了一个很好的示例,说明了如何通过su
升级权限执行这些命令。
答案 1 :(得分:5)
如果不使用您自己的自定义固件来授予对安全设置的访问权限,则无法实现。 请参阅此处的主题:http://groups.google.com/group/android-developers/browse_frm/thread/953c6f0eb0fa9bed#
答案 2 :(得分:5)
首先:您的应用必须是系统应用
这行代码可能有所帮助:
Settings.Global.putInt(getContentResolver(), Global.ADB_ENABLED, 1);
您需要此权限:
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
但在清单中添加此权限后,您将收到此错误: 权限仅授予系统应用
表示您的应用必须是系统应用。
答案 3 :(得分:3)
您可以通过在清单中请求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”
答案 4 :(得分:0)
如果您的设备具有root用户,且API级> 17启用adb:
$products = [
["id" => "123", "sku" => "MED_BL_DRESS", "size" => "medium", "color" => "black"],
["id" => "321", "sku" => "LG_GR_DRESS", "size" => "large", "color" => "green"],
["id" => "31321", "sku" => "LG_RD_DRESS", "size" => "large", "color" => "red"]
];
print_r(filterArray($products, ['size' => 'large']));
print_r(filterArray($products, ['size' => 'large', 'color' => 'green']));
function filterArray(array $products, array $filter = []): array
{
$result = [];
$keyCount = count($filter);
foreach ($products as $product) {
$match = 0;
foreach ($filter as $key => $value)
if ($product[$key] === $value) $match++;
if ($match === $keyCount) $result[] = $product;
}
return $result;
}
或(取决于su的实现)
Runtime.getRuntime().exec(new String[] {"su", "-c", "settings put global adb_enabled 1"});
要禁用-将最后一个参数从1更改为0
答案 5 :(得分:0)
你需要按照这三个步骤
<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)
禁用它adb shell pm grant your.package.name android.permission.WRITE_SECURE_SETTINGS
的 adb 授予 WRITE_SECURE_SETTINGS。设备必须连接到计算机,并启用 USB 调试。我开发了一个简单的应用程序,它使用这种方法来启用/禁用一些开发人员选项,例如 Debug USB 和 Keep Device Screen Active https://play.google.com/store/apps/details?id=it.stzan.devtools
免责声明:我是 DevTools 的实际开发者