有没有办法在 Android 设备上以编程方式打开/关闭 USB 调试?
5 回答
嗨,这是我在这里的第一篇文章,通常我不会打扰,但我看到没有人想给你答案,尽管有多种方法可以这样做。这全部来自我的应用程序,顺便说一句,我在 xda-dev 上“完成了”。还有一些代码可能是三星 MSMxxxx 特定的
如果你有root你确实可以。尽管其他人另有说法,但这里有 3 种方法 方法 1(广播密码) 方法 2(设置 sys.usb.config) 方法 3(设置全局 adb_enabled 1)
public String[] SET_DM_PORT_STATUS_LIST = new String[9];{
SET_DM_PORT_STATUS_LIST[0] = "setMTP";
SET_DM_PORT_STATUS_LIST[1] = "setMTPADB";
SET_DM_PORT_STATUS_LIST[2] = "setPTP";
SET_DM_PORT_STATUS_LIST[3] = "setPTPADB";
SET_DM_PORT_STATUS_LIST[4] = "setRNDISDMMODEM";
SET_DM_PORT_STATUS_LIST[5] = "setRMNETDMMODEM";
SET_DM_PORT_STATUS_LIST[6] = "setDMMODEMADB";
SET_DM_PORT_STATUS_LIST[7] = "setMASSSTORAGE";
SET_DM_PORT_STATUS_LIST[8] = "setMASSSTORAGEADB";}
public String[] SET_DM_PORT_CONFIG_LIST = new String[9];{
SET_DM_PORT_CONFIG_LIST[0] = "mtp";
SET_DM_PORT_CONFIG_LIST[1] = "mtp,adb";
SET_DM_PORT_CONFIG_LIST[2] = "ptp";
SET_DM_PORT_CONFIG_LIST[3] = "ptp,adb";
SET_DM_PORT_CONFIG_LIST[4] = "rndis,acm,diag";
SET_DM_PORT_CONFIG_LIST[5] = "rmnet,acm,diag";
SET_DM_PORT_CONFIG_LIST[6] = "diag,acm,adb";
SET_DM_PORT_CONFIG_LIST[7] = "mass_storage";
SET_DM_PORT_CONFIG_LIST[8] = "mass_storage,adb";}
Process su = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());
outputStream.writeBytes("am broadcast -a android.provider.Telephony.SECRET_CODE -d android_secret_code://" + SET_DM_PORT_STATUS_LIST[paramInt]+"\n");
outputStream.writeBytes("setprop sys.usb.config " + SET_DM_PORT_CONFIG_LIST[paramInt]+"\n");
if(SET_DM_PORT_STATUS_LIST[paramInt].contains("adb")){
outputStream.writeBytes("settings put global adb_enabled 1\n");
}
我正在反转 IOTHIDDENMENU.apk 并重新创建它的方法,但没有它使用的内部和隐藏 api。
在普通设备上,使用普通应用程序,你不能。
你需要一个有根设备,在/system/app中有一个应用程序,然后你就可以了。
无论如何,你不应该自己配置这样的东西,在这种情况下用户应该完全控制。
如果不使用您自己的自定义固件来授予对安全设置的访问权限,这是不可能的。在这里查看线程:http ://groups.google.com/group/android-developers/browse_frm/thread/953c6f0eb0fa9bed#
USB 调试是 Android 调试桥 (ADB) 的另一个名称。您要找的商品在这里
http://developer.android.com/reference/android/provider/Settings.Secure.html#ADB_ENABLED
这在 android 中是不可能的,因为你必须访问Setting.System
. 有关更多信息,请查看此处:如何以编程方式禁用 Android USB 调试
很好的答案: https ://stackoverflow.com/a/17029123/1136074
基本上它的:
android.os.Debug.waitForDebugger(); also you can use the following to determine if the debugger is connected: android.os.Debug.isDebuggerConnected(); //Determine if a debugger is currently att