डिवाइस बूट (ऑटोरन ऐप, आदि) पर सेवा कैसे शुरू करें
पहले के लिए: एंड्रॉइड 3.1+ संस्करण के बाद से आपको BOOT_COMPLETE प्राप्त नहीं होता है यदि उपयोगकर्ता ने कभी भी अपना ऐप कम से कम एक बार शुरू नहीं किया है या उपयोगकर्ता "बल बंद" एप्लिकेशन नहीं करता है। यह मालवेयर को स्वचालित रूप से रजिस्टर सेवा को रोकने के लिए किया गया था। यह सुरक्षा छेद Android के नए संस्करणों में बंद कर दिया गया था।
समाधान:
गतिविधि के साथ ऐप बनाएं। जब उपयोगकर्ता इसे चलाएगा तो एक बार एप्लिकेशन BOOT_COMPLETE प्रसारण संदेश प्राप्त कर सकता है।
दूसरे के लिए: बाहरी संग्रहण माउंट होने से पहले BOOT_COMPLETE भेजा जाता है। यदि एप्लिकेशन बाहरी संग्रहण में स्थापित है, तो इसे BOOT_COMPLETE प्रसारण संदेश प्राप्त नहीं होगा।
इस मामले में दो समाधान है:
- अपने ऐप को इंटरनल स्टोरेज में इंस्टॉल करें
- आंतरिक भंडारण में एक और छोटा ऐप इंस्टॉल करें। यह ऐप BOOT_COMPLETE को प्राप्त करता है और बाहरी स्टोरेज पर दूसरा ऐप चलाता है।
यदि आपका ऐप पहले से ही इंटरनल स्टोरेज में इंस्टॉल है तो नीचे दिया गया कोड आपको यह समझने में मदद कर सकता है कि डिवाइस बूट पर सर्विस कैसे शुरू करें।
मेनिफेस्ट.एक्सएमएल में
अनुमति:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
अपना BOOT_COMPLETED रिसीवर पंजीकृत करें:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
अपनी सेवा पंजीकृत करें:
<service android:name="org.yourapp.YourCoolService" />
रिसीवर OnBoot.java में:
public class OnBoot extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Create Intent
Intent serviceIntent = new Intent(context, YourCoolService.class);
// Start service
context.startService(serviceIntent);
}
}
अगर आपको डिवाइस RECEIVE_BOOT_COMPLETED नहीं पकड़ना है तो HTC के लिए शायद आपको इस मेनिफेस्ट में भी जोड़ना होगा:
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
रिसीवर अब इस तरह दिखता है:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
पुनः आरंभ एमुलेटर या वास्तविक डिवाइस के बिना BOOT_COMPLETED का परीक्षण कैसे करें? यह आसान है। इसे इस्तेमाल करे:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
डिवाइस आईडी कैसे प्राप्त करें? आईडी के साथ जुड़े उपकरणों की सूची प्राप्त करें:
adb devices
एडीबी में डिफ़ॉल्ट रूप से एडीबी आप पा सकते हैं:
adt-installation-dir/sdk/platform-tools
का आनंद लें! )