我们可以在Android设备上以编程方式启用/禁用USB调试吗?

时间:2013-09-13 09:13:35

标签: android

有没有办法在Android设备上以编程方式打开/关闭USB调试?

5 个答案:

答案 0 :(得分:3)

嗨,这是我在这里发表的第一篇文章,通常情况下我不会打扰,但我发现尽管有多种方法,但没有人愿意给你答案。 这都来自我的应用程序,我是xda-dev btw上的“idone”。此部分代码可能是三星MSMxxxx特定的

如果你有root,你的确可以。尽管其他人另有说法,但有三种方法可以做到这一点 方法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。

答案 1 :(得分:2)

在常规设备上,使用常规应用,您不能。

你需要一个有根设备,在/ system / app中有一个应用程序,然后就可以了。

无论如何,你不应该自己配置这样的东西,在这种情况下用户应该完全控制。

答案 2 :(得分:1)

这在Android中是不可能的,因为你必须访问Setting.System。有关详细信息,请查看此处:How can I disable Android USB debugging programmatically

答案 3 :(得分:1)

如果不使用您自己的自定义固件来授予对安全设置的访问权限,则无法实现。请参阅此处的主题:http://groups.google.com/group/android-developers/browse_frm/thread/953c6f0eb0fa9bed#

usb debugging是Android Debug Bridge(ADB)的另一个名称。您正在寻找的项目在这里

http://developer.android.com/reference/android/provider/Settings.Secure.html#ADB_ENABLED

答案 4 :(得分:-2)

很好的答案: 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