2012-08-16 28 views
11

Có cách nào để truy cập cài đặt thiết bị theo cách lập trình không?Cách truy cập cài đặt thiết bị theo cách lập trình?

Ví dụ: Cài đặt> Tùy chọn nhà phát triển> Gỡ lỗi USB> True/False

Cảm ơn bạn trước.

Chỉnh sửa: Gỡ lỗi USB chỉ là một ví dụ. Tôi có thể truy cập mọi cài đặt tồn tại trong Cài đặt trong thiết bị không.

+0

[Hãy xem điều này] (http://stackoverflow.com/q/3458275/940096) – Praveenkumar

+0

Liên kết trực tiếp là [tại đây] (https://groups.google.com/forum/#!topic/android -developers/lTxvDrD6m-0). – ChuongPham

Trả lời

10

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

Nhưng bạn cần quyền truy cập gốc để thực hiện việc này. Chỉ ứng dụng hệ thống có quyền thay đổi các thiết lập bảo mật

Edit: Hãy thử này thành Hiển thị tất cả ANR

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

và cho Đỗ không giữ hoạt động

ActivityManagerNative.getDefault().setAlwaysFinish(true)

nhưng ActivityManagerNative được giấu trong api tiêu chuẩn bộ. bạn sẽ cần phải phản chiếu hoặc sử dụng số này method để tải android.jar. Một lần nữa tôi đoán này cần truy cập root

+0

Cảm ơn. Mã này hoạt động nhưng tôi đã viết USB debugging làm ví dụ. Câu hỏi thực sự là, cài đặt nào có thể truy cập được. Tôi có thể truy cập "Không giữ hoạt động" hay "Hiển thị tất cả ANR" không? – auy

+0

kiểm tra chỉnh sửa. – nandeesh

+0

'Settings.Secure.putInt (getActivity(). GetContentResolver(), Settings.Secure.ADB_ENABLED, 1);' sẽ không hoạt động khi bạn cần ký ứng dụng của bạn với chứng chỉ nền tảng Android, ứng dụng của bạn có cấu hình trong 'AndroidManifest.xml' và ứng dụng của bạn được cài đặt trong '/ system/app' theo cách lập trình hoặc thủ công. Bạn thậm chí không thể làm điều này với một thiết bị bắt nguồn từ. – ChuongPham

3

Hãy thử như:

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

Trong AndroidManifest.xml:

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

và cuối cùng nhìn vào ví dụ này

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

+1

Ở trên sẽ không hoạt động khi bạn cần ký ứng dụng của mình bằng chứng chỉ nền tảng Android, ứng dụng của bạn có cấu hình thích hợp trong 'AndroidManifest.xml' và ứng dụng của bạn được cài đặt trong'/system/app' theo lập trình hoặc bằng tay. – ChuongPham

0

Bạn không thể bật USB Debugging trừ khi ứng dụng của bạn là ứng dụng hệ thống.

0

dòng mã này có thể giúp:

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

và bạn cần sự cho phép này:

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

nhưng sau khi thêm sự cho phép này trong manifest bạn sẽ nhận được lỗi này: Permission chỉ là cấp cho ứng dụng hệ thống

có nghĩa là ứng dụng của bạn phải là ứng dụng hệ thống.

3

Tôi biết rằng câu hỏi này cũ nhưng thú vị.

Giải pháp của Nandeesh hoạt động tốt. Nhưng nó không hoạt động nếu bạn muốn thay đổi các thiết lập nhất định như USB Debugging. Bạn phải sử dụng quyền sau đây.

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

Nhưng, nó không hoạt động với các ứng dụng không phải của hệ thống. Tuy nhiên, KHÔNG THỂ thực hiện việc này nếu bạn có quyền truy cập root. Bạn có thể thử giải pháp this nơi tác giả giải quyết chính xác điều tương tự.

Bạn cũng có thể thử https://github.com/alseambusher/adb-toggle

1

Nếu bạn ứng dụng là ứng dụng hệ thống thì bạn Đơn giản chỉ cần làm điều này để bật/tắt USB Debugging

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

Bạn cũng cần quyền root để làm điều này. Tôi đã bắt nguồn từ thiết bị và tôi chỉ cần thực hiện SU để bật/tắt Gỡ lỗi 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();

Điều tốt là bạn không cần phải đặt ứng dụng của bạn trong (/ system/priv-app /) ứng dụng đơn giản của bạn ví dụ: (/ data/app) thể làm điều này.

Các vấn đề liên quan