जवाबों:
सबसे पहले, आपको अपने में अनुमति चाहिए 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);
}
}
}
और अब आपकी सेवा तब शुरू होनी चाहिए जब फोन शुरू हो।
Intent.ACTION_BOOT_COMPLETED
आपके रिसीवर में हार्ड-कोडिंग स्ट्रिंग के बजाय इसका उपयोग करना बेहतर होगा । इसके अलावा, Intent(context, MySystemService.class)
इंटेंट बनाते समय नए कंस्ट्रक्टर का उपयोग करना चाहिए ।
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 हो रही है । कोई विचार?
यह एंड्रॉइड डिवाइस रिबूट के बाद चलने वाली गतिविधि शुरू करने का तरीका है :
इस कोड को अपनी 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()
?
onReceive()
एक कीBroadcastReceiver
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);
}
}
इसके अलावा आप अगर आप कोड को संशोधित नहीं करना चाहते हैं, तो ऑटोस्टार्ट जैसे ऐप का उपयोग कर सकते हैं, स्टार्टअप पर एक एंड्रॉइड एप्लिकेशन लॉन्च करने के लिए: ऑटोस्टार्ट - कोई रूट
शॉन का समाधान शुरू में मेरे लिए काम नहीं करता था (Android 4.2.2)। मुझे उसी एंड्रॉइड प्रोजेक्ट में एक डमी गतिविधि को जोड़ना था और कम से कम एक बार डिवाइस पर मैन्युअल रूप से गतिविधि को चलाना था। फिर सीन के समाधान ने काम करना शुरू कर दिया और बाद के रिबूट के बाद ब्रॉडकास्टरसीवर को सूचित कर दिया गया।
मैं इस प्रश्न में एक बिंदु जोड़ना चाहूंगा जिसे मैं कुछ दिनों से सामना कर रहा था। मैंने सभी उत्तरों की कोशिश की, लेकिन वे मेरे लिए काम नहीं कर रहे थे। यदि आप Android संस्करण 5.1 का उपयोग कर रहे हैं, तो कृपया इन सेटिंग्स को बदलें।
यदि आप एंड्रॉइड वर्जन 5.1 का उपयोग कर रहे हैं तो आपको ऐप सेटिंग्स से डिस-सेलेक्ट (लॉन्च पर प्रतिबंध) करना होगा।
सेटिंग> ऐप> आपका ऐप> लॉन्च करने के लिए प्रतिबंधित करें (डिस्क-चयन)
बूट प्रक्रिया के दौरान धीमे चढ़ाव से बचने android.intent.action.USER_PRESENT
के android.intent.action.BOOT_COMPLETED
लिए एक और दृष्टिकोण का उपयोग करना है। लेकिन यह केवल true
तभी है जब उपयोगकर्ता ने लॉक स्क्रीन को सक्षम किया है - अन्यथा यह आशय कभी प्रसारित नहीं होता है।
संदर्भ ब्लॉग - Android के ACTION_USER_PRESENT इरादे के साथ समस्या