Служба запуска 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>

person Spike    schedule 10.06.2013    source источник
comment
Вы должны зарегистрировать широковещательную рассылку для получения обновлений и отменить ее регистрацию, если активность не используется. super.registerReceiver(mLoggedOutReceiver, new IntentFilter(LOG_OUT_ACTION));   -  person nesimtunc    schedule 11.06.2013
comment
Я пробовал это обоими способами. Регистрация в манифесте Android и в классе. Тем не менее служба не запускается. Можете ли вы отправить пример кода или ссылку о том, как это сделать?   -  person Spike    schedule 12.06.2013
comment
Ответ здесь работает для вас? stackoverflow.com/questions/4641712/   -  person Bob Stine    schedule 25.02.2014
comment
Ответ здесь работает для вас? stackoverflow.com/questions/4641712/   -  person Bob Stine    schedule 25.02.2014


Ответы (2)


В своей деятельности создайте переменную BroadcastReceiver

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

и onCreate или onResume события Activity вы должны зарегистрироваться для этого BroadcastReceiver

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

и onDestory, или onStop, или onPause, независимо от того, что вы в ситуации должны отменить регистрацию этого BroadcastReceiver, чтобы больше не получать эти обновления.

super.unregisterReceiver(mBootCompletedReceiver);
person nesimtunc    schedule 12.06.2013

Служба запустится только тогда, когда есть метод onreceive с именем, потому что вы указали startservice внутри метода приема. Это означает, что вам нужно запустить какую-либо активность приемника, например, звонок или смс, чтобы запустить службу. Вместо этого вы можете запустить службу при загрузке. Поищи в Гугле.

person JayadevKV    schedule 24.10.2013