दिलचस्प पोस्ट
क्लास के कन्स्ट्रक्टर फ़ंक्शन में एक मान रिटर्निंग 'has_key ()' या 'इन'? आर का उपयोग करके पाश के लिए चर नाम बदलें एंड्रॉइड शेल के लिए एक्जीक्यूटेबल बिल्डिंग क्या करता है- D_XOPEN_SOURCE / क्या मतलब है? Monomorphism प्रतिबंध क्या है? इरादा-फ़िल्टर का उपयोग करके यूआरएल से एंड्रॉइड ऐप खोलें "मुझे याद रखें" चेकबॉक्स जोड़ें प्रॉक्सी, डेकोरेटर, एडाप्टर, और पुल पैटर्न कैसे भिन्न होते हैं? कैसे जावास्क्रिप्ट के साथ एक क्लिक अनुकरण? jquery का उपयोग कर एक वेबसाइट का एक स्क्रीनशॉट उत्पन्न करना पायथन वैरिएबल घोषणा क्या ईवेंट डिस्पैच थ्रेड पर स्विंग / एडब्ल्यूटी विजेट्स का निर्माण सुरक्षित है? सी बहुआयामी सरणी में सूचक पता एकाधिक इंडेक्स बनाम मल्टी-कॉलम इंडेक्स

बूट समय पर एंड्रॉइड -स्टार्टिंग सेवा

मुझे बूट समय पर एक सेवा शुरू करने की आवश्यकता है मैंने बहुत खोज की। वे ब्रॉडकास्टिसिवर के बारे में बात कर रहे हैं। जैसे ही मैं एंड्रॉइड डेवलपमेंट के लिए नया हूँ, मुझे एंड्रॉइड पर सेवाओं के बारे में एक स्पष्ट तस्वीर नहीं मिली। कृपया कुछ स्रोत कोड प्रदान करें।

वेब के समाधान से एकत्रित समाधान "बूट समय पर एंड्रॉइड -स्टार्टिंग सेवा"

एक BroadcastReceiver रिसीवर बनाएं और इसे ACTION_BOOT_COMPLETED प्राप्त करने के लिए पंजीकरण करें । आपको RECEIVE_BOOT_COMPLETED अनुमति की आवश्यकता है।

पढ़ें: ग्लोबल संदेश सुनना और प्रसारण करना, और अलार्म सेट करना

आपका रिसीवर:

 public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, YourService.class); context.startService(myIntent); } } 

आपका AndroidManifest.xml:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.broadcast.receiver.example" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name=".BR_Example" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- Declaring broadcast receiver for BOOT_COMPLETED event. --> <receiver android:name=".MyReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> <!-- Adding the permission --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> </manifest> 

डिवाइस को बूट होने पर स्वचालित रूप से शुरू करने के लिए अपनी स्वयं की एप्लिकेशन सेवा पंजीकृत करना संभव है। उदाहरण के लिए, आपको इसकी ज़रूरत है, जब आप एक HTTP सर्वर से पुश ईवेंट प्राप्त करना चाहते हैं और जैसे ही एक नई घटना होती है, उपयोगकर्ता को सूचित करना चाहते हैं। सेवा आरंभ करने से पहले उपयोगकर्ता को मैन्युअल रूप से गतिविधि शुरू करने की आवश्यकता नहीं है …

यह काफी सरल है पहले अपने ऐप को RECEIVE_BOOT_COMPLETED की अनुमति दें अगला आपको ब्रॉडकास्ट रीविइवर को पंजीकृत करने की आवश्यकता है। हम इसे BootCompletedIntentReceiver कहते हैं।

आपका Manifest.xml अब इस तरह दिखना चाहिए:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jjoe64"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application> <receiver android:name=".BootCompletedIntentReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <service android:name=".BackgroundService"/> </application> </manifest> 

अंतिम चरण के रूप में आपको रिसीवर को कार्यान्वित करना होगा यह रिसीवर अभी आपकी पृष्ठभूमि सेवा शुरू करता है

 package com.jjoe64; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.jjoe64.BackgroundService; public class BootCompletedIntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { Intent pushIntent = new Intent(context, BackgroundService.class); context.startService(pushIntent); } } } 

http://www.jjoe64.com/2011/06/autostart-service-on-device-boot.html से

यहां पोस्ट किए गए अधिकांश समाधान एक महत्वपूर्ण टुकड़े गुम हैं: एक जागरूक लॉक के बिना ऐसा करना आपकी सेवा को समाप्त करने से पहले इसे समाप्त हो जाने का खतरा है। इस समाधान को दूसरे धागे में देखा, यहां भी जवाब दे रहा है।

आपको पहले एक लॉक लॉक प्राप्त करना होगा। सौभाग्य से, समर्थन पुस्तकालय हमें यह करने के लिए एक वर्ग देता है :

 public class SimpleWakefulReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // This is the Intent to deliver to our service. Intent service = new Intent(context, SimpleWakefulService.class); // Start the service, keeping the device awake while it is launching. Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime()); startWakefulService(context, service); } } 

फिर, आपकी सेवा में, जागृत रहना जारी रखें:

  @Override protected void onHandleIntent(Intent intent) { // At this point SimpleWakefulReceiver is still holding a wake lock // for us. We can do whatever we need to here and then tell it that // it can release the wakelock. ... Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime()); SimpleWakefulReceiver.completeWakefulIntent(intent); } 

WAKE_LOCK की अनुमति जोड़ने और अपने रिसीवर को मैनिफेस्ट में पंजीकृत करने के लिए मत भूलना:

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> ... <service android:name=".SimpleWakefulReceiver"> <intent-filter> <action android:name="com.example.SimpleWakefulReceiver"/> </intent-filter> </service> 

आपको BOOT_COMPLETE के साथ-साथ REBOOT के लिए पंजीकरण करना चाहिए

 <receiver android:name=".Services.BootComplete"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.REBOOT"/> </intent-filter> </receiver> 

मैनिफेस्ट और उपयोग-अनुमति के रूप में अपनी बनाई गई सेवा को भी पंजीकृत करें

 <application ...> <service android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.example.MyBroadcastReciver"/> </intent-filter> </service> </application> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

और फिर ब्राड डाली रिसीवर में आपकी सेवा को बुलाओ

 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, MyService.class); context.startService(myIntent); } } 

पहले अपने manifest.xml फ़ाइल में एक रिसीवर को पंजीकृत करें:

  <receiver android:name="com.mileagelog.service.Broadcast_PowerUp" > <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter> </receiver> 

और उसके बाद इस रिसीवर के लिए एक प्रसारण लिखें:

 public class Broadcast_PowerUp extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_POWER_CONNECTED)) { Toast.makeText(context, "Service_PowerUp Started", Toast.LENGTH_LONG).show(); } else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) { Toast.makeText(context, "Service_PowerUp Stoped", Toast.LENGTH_LONG) .show(); } } }