2013-06-10 9 views
6

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

MyReceiver.class 
public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     // TODO Auto-generated method stub 
     //Toast.makeText(arg0, "Service", Toast.LENGTH_LONG).show(); 
     Intent myIntent = new Intent(arg0,MyS.class); 
     arg0.startService(myIntent); 
    } 
} 


MyS.class 
public class MyS extends Service { 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getBaseContext(), "Service started", Toast.LENGTH_LONG).show(); 
     return START_STICKY; 
    } 
} 


AndroidManifest.xml 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test.p" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <service android:enabled="true" 
      android:name=".MyS" > 
      <intent-filter> 
       <action android:name="com.test.p.MyS" > 
       </action> 
      </intent-filter> 
     </service> 

     <receiver android:enabled="true" 
      android:name=".MyReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 
+0

आपको अपडेट प्राप्त करने के लिए प्रसारण पंजीकृत करना चाहिए और गतिविधि का उपयोग न करने पर इसे अनधिकृत करना चाहिए। \t \t 'super.registerReceiver (mLoggedOutReceiver, new IntentFilter (LOG_OUT_ACTION));' – nesimtunc

+0

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

+0

क्या उत्तर आपके लिए काम करता है? http://stackoverflow.com/questions/4641712/starting-service-from-broadcastreceiver –

उत्तर

-1

अपने गतिविधि में, एक BroadcastReceiver चर बनाने

private BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
       // start your service right here... 
     } 
    }; 

और onCreate या Activity की onResume घटनाओं आपको लगता है कि BroadcastReceiver

super.registerReceiver(mBootCompletedReceiver, new IntentFilter("android.intent.action.BOOT_COMPLETED")); 

और onDestory या onStop या onPause जो कुछ भी आप के लिए पंजीकरण करना होगा स्थिति में इस प्रसारण को अब प्राप्त नहीं करने के लिए इस ब्रॉडकास्ट रिसीवर को अपंजीकृत करना चाहिए।

super.unregisterReceiver(mBootCompletedReceiver); 
-3

सेवा शुरू कर देंगे तभी होता है जब वहाँ एक onreceive विधि कहा जाता है coz यू प्राप्त विधि के अंदर startService दे दिया है है। इसका मतलब है, आपको सेवा शुरू करने के लिए कॉल या एसएमएस जैसी कुछ रिसीवर गतिविधि शुरू करनी है। यू बूट पर सेवा शुरू कर सकते हैं। यह गूगल।

संबंधित मुद्दे