Intereting Posts
Как привязать кнопку в нижней части относительной компоновки в андроиде Каков лучший сайт, чтобы получить подробную помощь в разработке приложений для Android? Как применять размер шрифта при рендеринге HTML-кода на Android или Java Как сериализовать пакет? Я хочу конкатрировать две строки для TextView в android, Data Binding Api Как преобразовать формат даты в миллисекунды? Как сделать все содержимое страницы android scoll вверх Как получить режим разрешения файлов программно в Java Использование памяти не уменьшается, даже я перерабатываю растровые изображения Создать группу для альфа-тестеров Google Play Как я могу связать родную библиотеку в Android Studio? Android: сохраните MediaPlayer во время обновления ориентации экрана Activity Как я могу изменить исходный код Android по умолчанию и заменить исходный код приложения «Настроить исходный экран»? Конфигурация Android Proguard для библиотеки поддержки V7 ActionBar Android: gravity = "right" не работает на всех устройствах для арабского и других языков RTL

Глядя на включение и выключение (переключение) ADB или USB-отладки с использованием командной строки или приложения

Я пытаюсь включить ADB (отладка USB) только тогда, когда мое приложение работает и отключает его, когда мое приложение не работает. У меня есть полный доступ к телефону, и он укоренен, доступен и т. Д., Но я не могу найти способ сделать переключение.

То, что я пробовал до сих пор:

 Process proc = Runtime.getRuntime().exec(new String [] { "su", "-c", "setprop", "persist.service.adb.enable", "0"}); proc.waitFor(); Process proc2 = Runtime.getRuntime().exec(new String [] { "su", "-c", "stop", "adbd"}); proc2.waitFor(); 

Это приводит к тому, что телефон мгновенно входит в цикл перезагрузки.

Код, который работает, прост:

 Settings.Secure.putInt(getContentResolver(),Settings.Secure.ADB_ENABLED, 0); // 0 to disable, 1 to enable 

Редактировать / обновить: благодаря @MohanT для следующего обновления:

 Settings.Global.putInt(getContentResolver(),Settings.Global.ADB_ENABLED, 0); // 0 to disable, 1 to enable 

Тем не менее, приложение должно быть системным приложением, чтобы иметь возможность использовать это. Чтобы выйти из необходимости подписывать его, создать собственный ролик и т. Д. Я сделал следующее, чтобы получить его как системное приложение.

Во-первых, я регулярно устанавливал его с помощью eclipse, затем adb shell:

 > su # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system # cat /data/app/filename.apk > /system/app/filename.apk # mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system # reboot 

Вы можете выполнить следующие действия:

  1. Проверьте, включен ли ADB. Для этого вы можете использовать соответствующую глобальную константу:

    • Settings.Global.ADB_ENABLED для API 17 и выше.
    • Settings.Secure.ADB_ENABLED до API 17.
  2. Используйте неявное Intent с Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS чтобы открыть параметры разработчиков, где пользователь может включить или отключить ADB.

Пример кода:

 public static final int API=Integer.valueOf(Build.VERSION.SDK_INT); public static int ENABLED=1,DISABLED=0; public static boolean adbEnabled(Context context){ if(API>16) return ENABLED == Settings.Global.getInt(context.getContentResolver(), Settings.Global.ADB_ENABLED,DISABLED); else return ENABLED == Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.ADB_ENABLED,DISABLED); } public void checkAdb(Context context){ //if ADB disabled if(!adbEnabled(context)){ //open developer options settings Intent intent = new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS); context.startActivity(intent); } } 

Только для справки:

До использования API 3 (возможно, больше не актуально) использовалась Settings.System.ADB_ENABLED .

Ответ Криса правильный, за исключением того, что поле ADB_ENABLED в классе Secure было обесценено, а строка перенесена в класс Global. Таким образом, вы можете использовать команду ниже –

 Settings.Global.putInt(getContentResolver(),Settings.Global.ADB_ENABLED, 0); // 0 to disable, 1 to enable 

Из моего опыта использования setprop не всегда работает надёжно и может даже противоречить параметру Настройки> Приложения> Разработка> Отладка USB. Кроме того, это может раздражать, например, если USB-отладка включена, но adb не работает и т. Д. Поэтому предпочтительнее использовать Settings.Secure.ADB_ENABLED … плюс вы всегда получаете уведомление в панели состояния.

Если вы не хотите перебирать проблему, чтобы установить приложение в системный раздел, только пытаясь получить доступ к Settings.Secure.ADB_ENABLED, вы можете вместо этого полагаться на другое приложение, которое уже делает эту работу:

Это приложение называется ADB Toggle. Вы можете найти его в Google Play:

https://play.google.com/store/apps/details?id=com.ramdroid.adbtoggle

Библиотека для доступа к параметрам отладки USB через ADB Toggle доступна здесь:

https://github.com/ramdroid/AdbToggleAccessLib