2013-06-10 16 views
6

ブロードキャスト受信機を使用してサービスを開始する次のコードを実装しています。放送受信機のトーストは正常に動作していますが、サービスは実行されていません。 誰かが私が間違っていた場所を教えてもらえますか?あなたの活動でブロードキャスト受信機を使用してAndroidサービスを開始する

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、新しいIntentFilter(LOG_OUT_ACTION)); ' – nesimtunc

+0

私は両方の方法を試しました。アンドロイドマニフェストとクラスで登録してください まだサービスが開始されていません。 これを行う方法のサンプルコードまたはリンクを送信できますか? – Spike

+0

答えはあなたのために働いていますか? http://stackoverflow.com/questions/4641712/starting-service-from-broadcastreceiver –

答えて

-1

、あなたは何でもそのBroadcastReceiver

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

とonDestoryまたはonStopまたはonPauseに登録する必要がありますActivityのBroadcastReceiver変数

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

onCreateまたはonResumeイベントを作成しますこの場合、このBroadcastReceiverの登録を解除して、このアップデートをもう受信しないようにする必要があります。

super.unregisterReceiver(mBootCompletedReceiver); 
-3

サービスは、受信メソッド内にstartserviceを指定した受信メソッドがある場合にのみ開始されます。つまり、サービスを開始するには、コールやSMSのような受信者のアクティビティを開始する必要があります。代わりに、Uは起動時にサービスを開始できます。それはGoogleです。

関連する問題