2013-06-10 7 views
6

Sto implementando il seguente codice, in cui voglio avviare un servizio utilizzando il ricevitore broadcast. Il brindisi nel ricevitore broadcast funziona correttamente ma il servizio non è in esecuzione. Qualcuno può dirmi dove ho sbagliato?Servizio di avvio Android tramite ricevitore broadcast

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

È necessario registrare la trasmissione per ricevere gli aggiornamenti e annullare la registrazione quando non si utilizza l'attività. \t \t 'super.registerReceiver (mLoggedOutReceiver, new IntentFilter (LOG_OUT_ACTION));' – nesimtunc

+0

Ho provato in entrambi i modi ... registrazione in Android manifest e in classe Ancora il servizio non si avvia. È possibile inviare un codice di esempio o un collegamento su come eseguire questa operazione? – Spike

+0

La risposta qui funziona per te? http://stackoverflow.com/questions/4641712/starting-service-from-broadcastreceiver –

risposta

-1

Nella vostra attività, creare un BroadcastReceiver variabile

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

e onCreate o onResume eventi di Activity è necessario registrarsi per questo BroadcastReceiver

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

e onDestory o onStop o onPause qualunque cosa in situazioni dovrebbe annullare la registrazione di questo BroadcastReceiver per non ricevere più questi aggiornamenti.

super.unregisterReceiver(mBootCompletedReceiver); 
-3

Il servizio verrà avviato solo quando è disponibile un metodo chiamato coz u ha fornito il servizio di avviamento all'interno del metodo di ricezione. Ciò significa che devi avviare alcune attività del ricevitore come call o sms per avviare il servizio. U può invece avviare il servizio all'avvio. Google it.