2012-08-16 2 views
11

프로그래밍 방식으로 장치 설정에 액세스 할 수있는 방법이 있습니까? 예를 들어프로그래밍 방식으로 장치 설정에 액세스하는 방법은 무엇입니까?

: 사전에

감사는 false 설정> 개발자 옵션> USB 디버깅> /.

편집 : USB 디버깅은 그 예입니다. 기기의 설정에있는 모든 설정에 액세스 할 수 있습니까?

+0

[이것 좀보세요] (http://stackoverflow.com/q/3458275/940096) – Praveenkumar

+0

직접 링크는 [여기] (https://groups.google.com/forum/#!topic/android)입니다. -developers/lTxvDrD6m-0). – ChuongPham

답변

10

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

하지만 이렇게하려면 루트 액세스가 필요합니다. 이 활동

ActivityManagerNative.getDefault().setAlwaysFinish(true)

을 유지하지 않는 모든 ANR 수

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

과에 대한 표시하려고하지만 표준 API에 ActivityManagerNative 숨겨져 : 만 시스템 애플리케이션은 보안 설정

편집을 변경할 수있는 권한이 세트. 당신은 반사를 할 필요가 있거나이 method을 사용하여 android.jar를 얻습니다. 의 AndroidManifest.xml에서

 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); 

: 는 다시 나는이 같은 시도

+0

감사합니다. 이 코드는 작동하지만 예제로 USB 디버깅을 작성했습니다. 실제 질문은 액세스 할 수있는 설정입니다. "활동을 지키지 마십시오"또는 "모든 ANR 표시"에 액세스 할 수 있습니까? – auy

+0

편집을 확인하십시오. – nandeesh

+0

Android 플랫폼 인증서를 사용하여 앱에 서명해야하므로 Settings.Secure.putInt (getActivity(). getContentResolver(), Settings.Secure.ADB_ENABLED, 1); '가 자체적으로 작동하지 않으므로 앱에 적절한 설정은'AndroidManifest.xml'에 있고, 앱은 프로그래밍 방식으로 또는 수동으로'/ system/app'에 설치됩니다. 루팅 된 장치로도이 작업을 수행 할 수 없습니다. – ChuongPham

3

루트 액세스를 필요로 추측

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

을 마지막으로이 예를 살펴

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

+1

위의 내용은 Android 플랫폼 인증서로 앱에 서명해야하고, 앱이 'AndroidManifest.xml'에 적절한 구성을 가지고 있으며 앱이 프로그래밍 방식으로 '/ system/app'에 설치되어 있거나 수동으로. – ChuongPham

0

당신 USB 디버깅을 켤 수 없다면 귀하의 앱은 시스템 앱입니다.

0

코드 행은 도움이 될 수

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

당신은이 권한이 필요합니다

하지만이 오류가 발생합니다 매니페스트에이 권한을 추가 한 후

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>가 : 권한 만입니다 시스템 응용 프로그램에 부여

을 의미합니다. 앱은 시스템 앱이어야합니다.

3

나는이 질문이 오래되었지만 흥미 롭다는 것을 안다.

Nandeesh의 솔루션이 잘 작동합니다. 그러나 USB 디버깅과 같은 특정 설정을 변경하려는 경우에는 작동하지 않습니다. 다음 권한을 사용해야합니다.

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

하지만 시스템이 아닌 앱에서는 작동하지 않습니다. 그러나 루트 액세스이있는 경우이 작업을 수행 할 수 있습니다. 저자가 똑같은 문제를 해결하는 this 해결책을 시도해 볼 수 있습니다.당신이 응용 프로그램 당신은 간단하게이 또한이 작업을 수행하려면 루트 액세스 권한이 필요

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

비활성화 USB 디버깅을 활성화/않는 시스템 응용 프로그램의 경우

또한 https://github.com/alseambusher/adb-toggle

1

을 시도 할 수 있습니다. 나는 장치를 뿌리 뽑았으므로 Usb 디버깅을 활성화/비활성화하려면 SU을 실행하기 만하면됩니다.

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();

좋은 것은 당신이 (/ 시스템/PRIV-응용 프로그램 /) 귀하의 간단한 응용 프로그램 즉 (/ 데이터/응용 프로그램)이 작업을 수행 할 수 있습니다에서 응용 프로그램을 배치하지 필요성을 입니다.

관련 문제