服务内的广播接收器不工作
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
我在服务中有一个接收器,因为即使 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