服务内的广播接收器不工作

A broadcast receiver inside a service isnt working

我在服务中有一个接收器,因为即使 activity 被破坏,我也需要预定的警报工作。这就是我所做的。

/**
 * Created by rishabh on 14/2/16.
 */
public class MyService  extends Service {

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

public class MyReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Calendar c = Calendar.getInstance();
        int hour=c.get(Calendar.HOUR_OF_DAY);
        int minute=c.get(Calendar.MINUTE);
        Calendar calendar = new GregorianCalendar(1990, 1, 1, hour, minute);
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
        String date = sdf.format(calendar.getTime());
        String str=date.charAt(0)+""+date.charAt(1)+""+date.charAt(3)+""+date.charAt(4);
        String LOG_TAG="DevicePolicyAdmin";
        Log.v(LOG_TAG, "Service Started");
        MainActivity.minochaDevicePolicyManager.resetPassword(str, 0);
    }
}
}

并触发接收器调度警报在这里

    Intent intent3=new Intent(MainActivity.this,MyService.class);
    startService(intent3);
            Intent intent2 = new Intent(MainActivity.this, MyService.MyReceiver.class);
            PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent2, 0);
            AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 60 * 1000, pintent);

MyService中的onReceive方法class只执行一次。为什么?可能是什么问题。请帮助

您需要在服务中注册如下,

IntentFilter filter = new IntentFilter();
  filter.addAction("SOME_ACTION");
  filter.addAction("SOME_OTHER_ACTION");

context.registerReceiver(receiver, filter);

同样在 onReceive 方法中,您需要检查触发的广播接收器的动作。

希望对您有所帮助。

您的问题之一是您使用使用广播接收器的意图获取服务。开始改变这个:

PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent2, 0);

为此:

PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent3, 0);

尝试将 MyReceiver 移动到一个独立的文件作为 public class 并使用此代码启动。

 Intent intent2 = new Intent(getApplicationContext(), MyReceiver.class);
            PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, intent2, 0);
            AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 60 * 1000, pintent);

更新 1:

这可能对你有帮助 -How to repeat my service using alarm manager?

更新 2:也检查这个 - Android - Periodic Background Service - Advice