मैं स्टार्टअप पर अपना ऐप कैसे शुरू करूं?


241

मैंने इस लिंक में नमूना कोड का उपयोग करने की कोशिश की लेकिन यह पुराना लगता है और यह काम नहीं किया। इसलिए एंड्रॉइड के बूटिंग खत्म होने पर मुझे अपने ऐप में क्या बदलाव करने हैं और अपने ऐप को अपने आप शुरू करने के लिए कौन सी फाइलें शुरू करनी हैं?

जवाबों:


315

सबसे पहले, आपको अपने में अनुमति चाहिए AndroidManifest.xml:

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

इसके अलावा, आप में AndroidManifest.xml, अपनी सेवा को परिभाषित करें और BOOT_COMPLETED कार्रवाई के लिए सुनें :

<service android:name=".MyService" android:label="My Service">
    <intent-filter>
        <action android:name="com.myapp.MyService" />
    </intent-filter>
</service>

<receiver
    android:name=".receiver.StartMyServiceAtBootReceiver"
    android:label="StartMyServiceAtBootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

फिर आपको रिसीवर को परिभाषित करना होगा जो BOOT_COMPLETED कार्रवाई प्राप्त करेगा और आपकी सेवा शुरू करेगा ।

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent serviceIntent = new Intent(context, MyService.class);
            context.startService(serviceIntent);
        }
    }
}

और अब आपकी सेवा तब शुरू होनी चाहिए जब फोन शुरू हो।


8
गतिविधियाँ: developer.android.com/guide/topics/fundamentals/activities.html सेवाएँ: developer.android.com/guide/topics/fundamentals/services.html जब फ़ोन वास्तव में शुरू होता है, तो अपना आवेदन शुरू करने के लिए, आपको आवश्यकता होगी जैसा कि ऊपर दिखाया गया है, सेवा को पंजीकृत करें और फिर वहां आप अपना ऐप शुरू करने के लिए startActivity () का उपयोग कर सकते हैं। यदि वे इसके लिए नहीं पूछते हैं, तो उपयोगकर्ता के सामने एक स्क्रीन रखना अच्छा नहीं है।
सीन स्कल्ट

19
बस यह जोड़ना चाहता था कि Intent.ACTION_BOOT_COMPLETEDआपके रिसीवर में हार्ड-कोडिंग स्ट्रिंग के बजाय इसका उपयोग करना बेहतर होगा । इसके अलावा, Intent(context, MySystemService.class)इंटेंट बनाते समय नए कंस्ट्रक्टर का उपयोग करना चाहिए ।
brianestey

7
क्या इरादे-फ़िल्टर का उपयोग करने के इरादे की जाँच के लिए कोई कारण है?
पीजूस

1
किसी कारण के Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own fileलिए public classलाइन पर im हो रही है । कोई विचार?
pattyd

3
MySystemService क्या है?
खेल

120

यह एंड्रॉइड डिवाइस रिबूट के बाद चलने वाली गतिविधि शुरू करने का तरीका है :

इस कोड को अपनी AndroidManifest.xmlफ़ाइल में, <application>तत्व के भीतर (तत्व के भीतर नहीं<activity> ) डालें :

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

<receiver
    android:enabled="true"
    android:exported="true" 
    android:name="yourpackage.yourActivityRunOnStartup"
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

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

</receiver>

फिर एक नया वर्ग बनाएं yourActivityRunOnStartup( प्रकट में तत्व के android:nameलिए निर्दिष्ट मिलान <receiver>):

package yourpackage;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class yourActivityRunOnStartup extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }

}

नोट: कॉल i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);महत्वपूर्ण है क्योंकि गतिविधि गतिविधि के बाहर संदर्भ से लॉन्च की गई है। इसके बिना, गतिविधि शुरू नहीं होगी।

इसके अलावा, मूल्यों android:enabled, android:exportedऔर android:permissionमें <receiver>टैग अनिवार्य नहीं है। एप्लिकेशन को इन मूल्यों के बिना घटना प्राप्त होती है। उदाहरण यहाँ देखें ।


मुझे स्थानीय सेवा करने से बचने के लिए यह "शॉर्टकट" पसंद है। क्या वह कोड उस वर्ग में है जो फैली हुई है Application? शायद भीतर onCreate()?
किसी ने

2
ऐसा लगता है कि कोड की है कि पैरा के भीतर होना चाहिए onReceive()एक कीBroadcastReceiver
किसी ने कहीं न कहीं

2
यह कोड "yourActivityrRunOnStartup" नाम की गतिविधि में होना चाहिए जो ब्रॉडकास्टसीवर क्लास और ऑनरिविव () पद्धति के अंदर फैली हुई है।
थ्रीलोस

2
मैं एक 10 upvotes देने की कोशिश की, लेकिन नहीं कर सका। क्षमा करें और धन्यवाद।
सायका

1
यह मेरे लिए काम करता है, लेकिन अगर मैं सिर्फ "<एक्शन एंड्रॉइड: name =" android.intent.action.BOOT_COMPLETED "/>" इरादे फिल्टर में था। अगर मैंने अन्य दो का उपयोग किया तो यह काम नहीं किया।
इम्मोम 4

67

ACTION_BOOT_COMPLETE के लिए सुनें और वहां से आपको जो करना है वह करें। यहां एक कोड स्निपेट है।

अपडेट करें:

उत्तर पर मूल लिंक नीचे है, इसलिए टिप्पणियों के आधार पर, यह लिंक कोड है, क्योंकि लिंक नीचे होने पर कोई भी कभी भी कोड को याद नहीं करेगा।

AndroidManifest.xml (एप्लिकेशन-पार्ट) में:

<receiver android:enabled="true" android:name=".BootUpReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

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

...

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

...

public class BootUpReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
                Intent i = new Intent(context, MyActivity.class);  //MyActivity can be anything which you want to start on bootup...
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);  
        }

}

स्रोत: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup


इस कोड को किस फ़ाइल में रखा गया है: पब्लिक क्लास BootUpReceiver तक प्रसार करता है प्रसारणकर्ता
Jeff Janes

यह काम करता है, धन्यवाद! (एंड्रॉइड 4.0.4 एपीआई स्तर 15 पर काम किया गया)। युप .. यह 2017 है और मुझे अभी भी एंड्रॉइड 4.0.4 के लिए विकसित करना है .. :(
लुका

2
एंड्रॉइड 8.0 पर काम नहीं करता है! हालांकि एंड्रॉइड 4.0 पर काम करता है।
कोडजॉम्बी

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

@ आशुतोष त्रिपाठी क्या आपने इसे ठीक किया था?
राल्फगैब

10

इसके अलावा आप अगर आप कोड को संशोधित नहीं करना चाहते हैं, तो ऑटोस्टार्ट जैसे ऐप का उपयोग कर सकते हैं, स्टार्टअप पर एक एंड्रॉइड एप्लिकेशन लॉन्च करने के लिए: ऑटोस्टार्ट - कोई रूट


2

शॉन का समाधान शुरू में मेरे लिए काम नहीं करता था (Android 4.2.2)। मुझे उसी एंड्रॉइड प्रोजेक्ट में एक डमी गतिविधि को जोड़ना था और कम से कम एक बार डिवाइस पर मैन्युअल रूप से गतिविधि को चलाना था। फिर सीन के समाधान ने काम करना शुरू कर दिया और बाद के रिबूट के बाद ब्रॉडकास्टरसीवर को सूचित कर दिया गया।


0

स्क्रीनशॉट

मैं इस प्रश्न में एक बिंदु जोड़ना चाहूंगा जिसे मैं कुछ दिनों से सामना कर रहा था। मैंने सभी उत्तरों की कोशिश की, लेकिन वे मेरे लिए काम नहीं कर रहे थे। यदि आप Android संस्करण 5.1 का उपयोग कर रहे हैं, तो कृपया इन सेटिंग्स को बदलें।

यदि आप एंड्रॉइड वर्जन 5.1 का उपयोग कर रहे हैं तो आपको ऐप सेटिंग्स से डिस-सेलेक्ट (लॉन्च पर प्रतिबंध) करना होगा।

सेटिंग> ऐप> आपका ऐप> लॉन्च करने के लिए प्रतिबंधित करें (डिस्क-चयन)


3
मुझे नहीं लगता कि यह कभी मानक था। मैंने "लॉन्च करने के लिए प्रतिबंध" के बारे में कभी नहीं सुना है। इसे अलग-अलग सैमसंग, आसुस, सोनी पर कभी नहीं देखा गया ... इसका मुझे कोई मतलब नहीं है। यह कहता है कि ऐप को केवल शुरू करने की अनुमति है? इसका क्या मतलब है?
अविश्वसनीय जन

0

बूट प्रक्रिया के दौरान धीमे चढ़ाव से बचने android.intent.action.USER_PRESENTके android.intent.action.BOOT_COMPLETEDलिए एक और दृष्टिकोण का उपयोग करना है। लेकिन यह केवल trueतभी है जब उपयोगकर्ता ने लॉक स्क्रीन को सक्षम किया है - अन्यथा यह आशय कभी प्रसारित नहीं होता है।

संदर्भ ब्लॉग - Android के ACTION_USER_PRESENT इरादे के साथ समस्या


तो, दूसरे शब्दों में, यह नहीं किया जाना चाहिए
behelit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.