2011-01-25 11 views
15

मैंने रिकवरी सिस्टम सिस्टम का उपयोग करके एंड्रॉइड में फ़ैक्टरी रीसेट करने की कोशिश की, लेकिन मुझे अनुमति त्रुटियां मिलती हैं, जिन्हें मैं ओवरराइट नहीं कर सकता क्योंकि वे सिस्टम अनुमतियां हैं। मैं जानना चाहता हूं कि फ़ैक्टरी रीसेट करने का कोई और तरीका है या नहीं?एंड्रॉइड फैक्टरी प्रोग्रामेटिक रीसेट रीसेट करें

+6

मैन्युअल रूप से? एक ऐप * कभी * फ़ैक्टरी रीसेट करने की अनुमति क्यों होगी? – kcoppock

+10

यह वास्तव में डोडी लगता है। यदि कोई उपयोगकर्ता फ़ैक्टरी रीसेट चाहता है, तो वे इसे स्वयं कर सकते हैं। वे अनुमतियां बहुत अच्छे कारण के लिए हैं। – Jems

+4

उल्लेख नहीं है, अगर आपका ऐप ऐसा करता है, तो यह भी फैक्टरी रीसेट के बाद भी चला जाएगा ... – kcoppock

उत्तर

0

मेरा सुझाव है कि आप उपयोगकर्ता को उचित सेटिंग्स गतिविधि में भेजें और उन्हें स्वयं करने दें।

देखें this tutorial और उपयोग सेटिंग्स गतिविधि android.provider.Settings.ACTION_PRIVACY_SETTINGS

3

यह एक कई अलग अलग उपकरणों मैं कोशिश की है पर काम करता है। (एक से अधिक 20)

Context foreignContext = createPackageContext("com.android.settings", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); 
Class<?> yourClass = foreignContext.getClassLoader().loadClass("com.android.settings.MasterClear"); 

Intent intent = new Intent(foreignContext, yourClass); 
startActivity(intent); 
+4

यह अब एंड्रॉइड 3.0 के आसपास काम नहीं करना चाहिए। किसी डिवाइस को वाइप करने के लिए डिवाइस एडमिन एपीआई का उपयोग करें। – CommonsWare

11

तीसरे पक्ष के अनुप्रयोगों सबसे निश्चित रूप से ऐसा कर सकते हैं।

2.2+ डिवाइस (नवीनतम 4.x सहित) पर आपको डिवाइसपॉलिसी मैनेजर का उपयोग करना होगा और AndroidManifest.xml में अनुमतियां शामिल करनी होंगी। पुराने उपकरणों के लिए आप अन्य संदर्भ में वर्णित विदेशी संदर्भ लोडर का उपयोग कर सकते हैं।

import android.app.admin.DevicePolicyManager; 
import android.content.ComponentName; 

    DevicePolicyManager mDPM; 
    ComponentName mDeviceAdmin; 

पर एंड्रॉयड संस्करण का निर्धारण बनाएँ और वस्तुओं

currentAPIVersion = Build.VERSION.SDK_INT; 

    if (currentAPIVersion >= android.os.Build.VERSION_CODES.FROYO) { 
     //2.2+ 
     mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 
     mDeviceAdmin = new ComponentName(this, WipeDataReceiver.class); 
    } 

WipeDataReceiver वर्ग DeviceAdminReceiver लागू करने के लिए एक वर्ग था पर संभाल करने के लिए, लेकिन किसी भी ओवरराइड या कोड अपडेट नहीं था।

public static class WipeDataReceiver extends DeviceAdminReceiver { 

    } 

फिर से शुरू करें, शुरुआत में फैक्टरी रीसेट की पुष्टि करनी होगी। जब गतिविधि परिणाम देता है तो यह wipeData निष्पादित करेगा। यदि यह फ्रायओ या कम है, तो आप स्टॉक फैक्टरी रीसेट गतिविधि को कूद सकते हैं।

if (currentAPIVersion >= android.os.Build.VERSION_CODES.FROYO) { 
    // 2.2+ 
    if (!mDPM.isAdminActive(mDeviceAdmin)) { 
     Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
     intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdmin); 
     intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Process will remove user installed applications, settings, wallpaper and sound settings. Are you sure you want to wipe device?"); 
     startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); 
    } else { 
     // device administrator, can do security operations 
     mDPM.wipeData(0); 
    } 

} else { 
    // 2.1 
    try { 
     Context foreignContext = this.createPackageContext("com.android.settings", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); 
     Class<?> yourClass = foreignContext.getClassLoader().loadClass("com.android.settings.MasterClear"); 
     Intent i = new Intent(foreignContext, yourClass); 
     this.startActivityForResult(i, REQUEST_CODE_ENABLE_ADMIN); 
    } catch (ClassNotFoundException e) { 

    } 

} 
+0

"WipeDataReceiver" का क्या संदर्भ है? – 130nk3r5

+0

'REQUEST_CODE_ENABLE_ADMIN' क्या है? – ThomasW

+0

REQUEST_CODE_ENABLE_ADMIN क्या है? – TapanHP

1

@TapanHP, आप गतिविधि परिणाम कॉलबैक को संभालने के लिए किसी भी आईडी का उपयोग कर सकते हैं।

int REQUEST_CODE_ENABLE_ADMIN = 1234;

संबंधित मुद्दे