0

我试图启动一个Service内部的BroadcastReceiver. BroadcastReceiver收到BOOT_COMPLETED。_ 我需要Service定期启动。我试过下面的代码:

BroadcastReceiver: _

public class SainarReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        App.setContext(context);
        ExceptionHelpers.dLog("SainrCoService", SainarReceiver.class.getSimpleName() + " on Receive : " + App.getString(R.string.app_name));
        SainarService sainarService = new SainarService(context);
        Intent mIntent = new Intent(context , sainarService.getClass());
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, 1000, pendingIntent);
    }
}

Service公共类 SainarService 扩展服务 {

    public SainarService(){

    }
    public SainarService(Context iContext){
        this.iContext = iContext;
        App.setContext(iContext);
        ExceptionHelpers.dLog("SainrCoService", SainarService.class.getSimpleName() + " Constructor : " + App.getString(R.string.app_name));
    }
    private Context iContext;

    @Override
    public IBinder onBind(Intent intent) {
        // ExceptionHelpers.dLog("SainrCoService", SainarService.class.getSimpleName() + " on Bind : " + App.getString(R.string.app_name));
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        ExceptionHelpers.dLog("SainrCoService", SainarService.class.getSimpleName() + " on Create : " + App.getString(R.string.app_name));
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        ExceptionHelpers.dLog("SainrCoService", SainarService.class.getSimpleName() + " on Start : " + App.getString(R.string.app_name));
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        ExceptionHelpers.dLog("SainrCoService", SainarService.class.getSimpleName() + " on Start Command : " + App.getString(R.string.app_name));
        return super.onStartCommand(intent, flags, startId);
    }
}

清单:

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

<receiver
    android:name="com.emaarit.app.sainarco.receivers.SainarReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

<service android:enabled="true" android:name="com.emaarit.app.sainarco.receivers.SainarService"/>

在开始但BOOT_COMPLETED没有!任何想法这里出了什么问题?BroadcastReceiverService

4

1 回答 1

1

使用PendingIntent.getService()而不是PendingIntent.getBroadcast()引用PendingIntenta Service,就像在您的情况下一样。

看看官方文档: http: //developer.android.com/reference/android/app/PendingIntent.html#getService (android.content.Context, int, android.content.Intent, int)。

这里也不需要实例化服务:

SainarService sainarService = new SainarService(context);

你应该能够做到:

Intent mIntent = new Intent(context , SainarService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
于 2015-09-02T10:57:23.980 回答