2012-08-16 12 views
11

Czy istnieje jakiś sposób, aby uzyskać dostęp do ustawień urządzenia programowo?Jak programowo uzyskać dostęp do ustawień urządzenia?

Dla przykładu: Ustawienia> Opcje programisty> debugowanie USB> true/false

góry dzięki.

Edytuj: debugowanie USB to tylko przykład. Czy mogę uzyskać dostęp do wszystkich ustawień, które istnieją w Ustawieniach urządzenia.

+0

[Spójrz na to] (http://stackoverflow.com/q/3458275/940096) – Praveenkumar

+0

Bezpośredni link to [tutaj] (https://groups.google.com/forum/#!topic/android -developers/lTxvDrD6m-0). – ChuongPham

Odpowiedz

10

Settings.Secure.putInt(getActivity().getContentResolver(),Settings.Secure.ADB_ENABLED, 1);

Do tego celu potrzebny jest dostęp root. Tylko aplikacje systemowe mają uprawnień do zmiany bezpiecznych ustawień

EDIT: Spróbuj tego, aby pokazać wszystkie błędów ANR

Settings.Secure.putInt(ContentResolver,Settings.Secure.ANR_SHOW_BACKGROUND,0);

i nie trzymaj za działalność

ActivityManagerNative.getDefault().setAlwaysFinish(true)

ale ActivityManagerNative jest ukryty w standardzie API zestaw. będziesz musiał wykonać albo odbicie, albo użyć tego method, aby pobrać android.jar. Znowu myślę, że to wymaga dostępu roota

+0

Dzięki. Ten kod działa, ale jako przykład napisałem debugowanie USB. Prawdziwe pytanie brzmi, które ustawienia są dostępne. Czy mogę uzyskać dostęp również do "Nie zatrzymuj działań" lub "Pokaż wszystkie ANR"? – auy

+0

sprawdź edycję. – nandeesh

+0

'Ustawienia.Secure.putInt (getActivity(). GetContentResolver(), Settings.Secure.ADB_ENABLED, 1);' nie będzie działał sam, ponieważ musisz podpisać aplikację za pomocą certyfikatu platformy Android, twoja aplikacja ma odpowiednie konfiguruje się w 'AndroidManifest.xml', a twoja aplikacja jest instalowana programowo lub ręcznie w'/system/app'. Nie możesz tego zrobić nawet z urządzeniem zrootowanym. – ChuongPham

3

Spróbuj jak:

 int adb = Settings.Secure.getInt(context.getContentResolver(), 
    Settings.Secure.ADB_ENABLED, 0); 
 // toggle the USB debugging setting 
adb = adb == 0 ? 1 : 0; 
 Settings.Secure.putInt(context.getContentResolver(), 
Settings.Secure.ADB_ENABLED, adb); 

W AndroidManifest.xml:

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

i wreszcie spojrzeć na ten przykład

http://code.google.com/p/secure-settings-widget/source/browse/src/com/lieryan/adbwidget/ADBAppWidgetProvider.java?r=eb23b2d6989ccade05f095806db5888f1ba62737

+1

Powyższe informacje nie będą działały same, ponieważ musisz podpisać swoją aplikację za pomocą certyfikatu platformy Android, Twoja aplikacja ma odpowiednie konfiguracje w "AndroidManifest.xml", a Twoja aplikacja jest programowo lub w systemie '/ system/app' zainstalowana lub ręcznie. – ChuongPham

0

Ty nie można włączyć debugowania USB, chyba że Twoja aplikacja to aplikacja systemowa.

0

Ta linia kodu może pomóc:

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

i trzeba to uprawnienie:

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

ale po dodaniu tego uprawnienia w oczywisty otrzymasz ten błąd: zgody jest tylko przyznany aplikacji systemowych

co oznacza Twoja aplikacja musi być aplikacją systemową.

3

Wiem, że to pytanie jest stare, ale jest interesujące.

Rozwiązanie Nandeesha działa dobrze. Ale to nie działa, jeśli chcesz zmienić pewne ustawienia, takie jak debugowanie USB. Musisz użyć następującego pozwolenia.

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

Ale nie działa z aplikacjami niesystemowymi. Jednakże, jest to MOŻLIWE, aby to zrobić, jeśli masz dostęp do roota. Możesz wypróbować rozwiązanie this, w którym autor rozwiązuje dokładnie to samo.

Możesz także spróbować https://github.com/alseambusher/adb-toggle

1

Jeśli aplikacja jest aplikacja systemu to po prostu to zrobić, aby włączyć/wyłączyć debugowanie USB

Settings.Secure.putInt(getActivity().getContentResolver(),Settings.Secure.ADB_ENABLED, 1);

Należy również dostęp do roota, aby to zrobić. Mam zrootowane urządzenie i po prostu wykonuję SU, aby włączyć/wyłączyć funkcję debugowania 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();

Dobrą rzeczą jest ty NIE konieczność umieszczenia aplikacji w (/ system/app/priv-) Twój prosta aplikacja tj (/ data/app) może to zrobić.

Powiązane problemy