2012-01-21 15 views
11

में बूट होने के बाद ऑटो स्टार्ट एप्लिकेशन मैं एक एप्लीकेशन बनाना चाहता हूं जिसमें इसकी सेटिंग्स में ऑटो स्टार्ट विकल्प है। मैंने अपने एप्लिकेशन में सेटिंग गतिविधि की है जो वरीयता एक्टिविटी से ली गई है और ऑटो स्टार्ट विकल्प के लिए चेकबॉक्स प्रेफरेंस प्रदान करती है। यदि ऑटो स्टार्ट विकल्प सक्षम है तो फोन का बूटिंग पूरा होने पर मेरा एप्लिकेशन शुरू होना चाहिए। और यदि ऑटो स्टार्ट विकल्प अक्षम है तो इसे बूट पर पूरा नहीं होना चाहिए।एंड्रॉइड

BroadcastReceiver के इस मैं को लागू किया है व्युत्पन्न वर्ग जो आशय BOOT_COMPLETED प्राप्त प्राप्त, AndroidManifest.xml में रिसीवर घोषणा और भी AndroidManifest.xml में अनुमति देने के लिए।

आवेदन में आवेदन की एक व्युत्पन्न कक्षा भी है और आवेदन व्युत्पन्न कक्षा के ऑनरेट विधि से भी सेवा शुरू करें। यदि मैं एंड्रॉइडमैनिफेस्ट.एक्सएमएल में रिसीवर घोषित करता हूं तो मेरे आवेदन के निर्माण को पूरा करने के बाद और बाद में ब्रॉडकास्ट रिसीवर के रिसीव विधि को बुलाया जाता है।

अब समस्या यह है कि मेरा एप्लिकेशन बूट पर शुरू होता है जब ऑटो स्टार्ट सक्षम या अक्षम होता है। ऑटो स्टार्ट अक्षम होने पर एप्लिकेशन शुरू करना संभव नहीं है?

+0

(http://stackoverflow.com/questions/2784441/trying-to [एंड्रॉयड पर बूट पर एक सेवा शुरू करने के लिए कोशिश कर रहा है] के संभावित डुप्लिकेट -स्टार्ट-ए-सर्विस-ऑन-बूट-ऑन-एंड्रॉइड) – Christina

उत्तर

10

आप isAutoStartEnabled के लिए एक बूलियन मान संग्रहीत करने के लिए साझा वरीयता का उपयोग कर सकते हैं, और ब्रॉडकास्ट रिसीवर में यह मान जांचें, केवल यह सुनिश्चित करें कि यह सच है।

आपके मामले में, समस्या यह नहीं है कि आपको प्रसारण प्राप्त होता है लेकिन प्रसारण कौन प्राप्त करता है। बेस्ट ऑफ लक ..

मुझे आशा है कि यह मदद करता है ..

+0

लेकिन बूटिंग पूर्ण होने के बाद, पहले मेरे आवेदन व्युत्पन्न वर्ग के क्रिएटिव को ब्रॉडसेरेसेवर के रिलीज पर कॉल करने से पहले कॉल किया जाता है। इसका मतलब है कि मेरा आवेदन बनाया या शुरू किया गया है। लेकिन अगर ऑटो स्टार्ट अक्षम है तो मैं एप्लिकेशन शुरू नहीं करना चाहता हूं। –

+0

क्या आप अपनी मेनिफेस्ट फ़ाइल की सामग्री पोस्ट कर सकते हैं?, मुझे लगता है कि समस्या वहां झूठ बोल सकती है ... –

+0

कृपया सुनिश्चित करें कि आपके द्वारा प्रकट फ़ाइल में BOOT_COMPLETE के लिए इच्छित फ़िल्टर आपके गतिविधि टैग के साथ नहीं बल्कि आपके रिसीवर टैग के साथ है। –

6

मैं एंड्रॉयड 3.1 के बाद अपने BroadcastReceiver जो BOOT_COMPLETED आशय प्राप्त करता है से लगता है कि अपने काम करने के लिए नहीं जा रहा। उपयोगकर्ता को इसके साथ बातचीत करके आवेदन को जागृत करना होगा।

तो, डिवाइस को बूट करने के बाद सभी तृतीय पक्ष एप्लिकेशन स्टॉप के रूप में झूठ बोल रहे हैं।

और वर्तमान में आपके आवेदन के लिए आप SharedPreferences उपयोग कर सकते हैं अपने आवेदन स्वत: शुरू करने के लिए ..

अद्यतन: (केवल उच्च संस्करण के लिए 3.1 नीचे Android संस्करण के लिए यह काम करता है, लेकिन आप के साथ उपयोगकर्ता बातचीत करने के लिए है अपने डिवाइस पर बूट होने के बाद आवेदन)

आपको android.intent.action.BOOT_COMPLETED मंशा के साथ उपयोग करने की आवश्यकता है।

जोड़ें अपने मैनिफ़ेस्ट फ़ाइल के लिए निम्न:

<receiver android:name="App_Receiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</receiver> 

App_Receiver वर्ग को लागू करने BoradcastRecieveronReceive() विधि लागू करें और अपने ऐप से अपनी पसंदीदा गतिविधि शुरू करें।

public void onReceive(Context context, Intent intent) { 
    // make sure you receive "BOOT_COMPLETED" 
// Here isAutoStartEnabled check sharedPreferences for Auto Start flag 
if (isAutoStartEnabled) { 

    if ((intent.getAction() != null) && (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))) 
    { 
     // Start the service or activity 
    } 
} 
+0

वर्तमान में मैंने पहले से साझा साझाकरण का उपयोग कर ऑटो स्टार्ट का झंडा पढ़ा है। लेकिन ऑटो स्टार्ट अक्षम होने पर एप्लिकेशन को शुरू नहीं करना संभव है? क्या आप विस्तार से जवाब दे सकते हैं? –

+0

मैंने लिखा है कि यह पहले ही आवेदन में लागू है। और यह पूरी तरह से काम करता है, लेकिन मैं हर बार इरादा प्राप्त नहीं करना चाहता क्योंकि यह हर बार आवेदन शुरू करता है। क्या हर बार बूट पूरा इरादा प्राप्त नहीं करना संभव है? –

+1

नहीं, यदि आप किसी भी प्रसारण रिसीवर को पंजीकृत करते हैं तो उस प्रसारण के लिए डिवाइस पर कोई भी कार्रवाई करने पर, आपके पास यह है, आप इसे पंजीकृत करने के बाद नियंत्रित नहीं कर सकते .. बस अपनी स्थिति पर उपयोग करें .. – user370305

1
final SharedPreferences sharedPreferences = getSharedPreferences("Application", MODE_PRIVATE); 
     boolean isAutoStartEnabled = sharedPreferences.getBoolean("isAutoStartEnabled", false); 

     if (isAutoStartEnabled) { 
      startActivity(new Intent()); 
     } 

मैं इस आप

+0

एप्लिकेशन में ऐसी सेवा भी होती है जो एप्लिकेशन बनने पर पृष्ठभूमि में शुरू होती है, न केवल एप्लिकेशन में गतिविधि होती है। –

+0

क्या आप अपना कोड मुख्य थ्रेड –

+0

पर रख सकते हैं जब आप चेकबॉक्स को अचयनित करते हैं, तो SharePreference सेट में "isAutoStartEnabled" मान झूठी है अन्यथा इसे सही बनाते हैं। और बूट में पूर्ण SharePreference से "isAutoStartEnabled" मान की जांच करें। –

6

में मदद करता है आशा है कि आप का उपयोग करता है-अनुमति आपके प्रकट में android.permission.RECEIVE_BOOT_COMPLETED जोड़ने के लिए।

1
इस

मेरे लिए काम करता है:

public class BootCompleteReceiver extends BroadcastReceiver { 
    public static final String PREFS_NAME = "MyPrefsFile"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { 
     Log.d("boot completed", "boot completed caught"); 


     Boolean autoRestart = false; 
     SharedPreferences sp = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
     autoRestart = sp.getBoolean("autoRestart", false); 

     if (autoRestart){ 

      Log.d("boot completed", "auto restart true"); 

      Intent i = new Intent(context, WelcomeScreen.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 

     } 
    } 



} 

}