我的应用程序有问题,它从服务器获取数据并决定何时提醒,我在服务中意识到这一点时出错了,因为在睡眠模式服务停止时,我需要将其替换为Alarm但我有很多服务中的变量并将它们发送到AlarmReceiver类是有问题的,我读到了内部类但我无法在清单中注册它只能是静态的,我试着使用寄存器接收器但是它不起作用我做错了吗?
public class AlarmReceiver extends BroadcastReceiver {
private String text;
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
Autobus66Service.UpdatePassages();
wl.release();
}
public void SetAlarm(Context context,String text){
this.text = text;
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 30 * 1, pi);
}
public void CancelAlarm(Context context)
{
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
@Override
public void onCreate() {
Log.d("service onCreate", MainActivity.TAG);
handler = new Handler();
intent = new Intent(AppNames.BROADCAST_ACTION);
...
alarm = new AlarmReceiver();
IntentFilter filter= new IntentFilter();
registerReceiver(alarm,filter);
}
@Override
public void onStart(Intent intent, int startId) {
Log.d("service onStart", MainActivity.TAG);
handler.removeCallbacks(sendUpdatesToUI);
handler.postDelayed(sendUpdatesToUI, 1000);
createNotification();
alarm.SetAlarm(this,"Some text");
}
在AndroidManifest中看起来像:
<receiver android:process=":remote" android:name="com.autobus66.autobus66.service.Autobus66Service$AlarmReceiver">
</receiver>
答案 0 :(得分:0)
它可能只是
public static class AlarmReceiver
我相信它应该被引用为
android:name="com.autobus66.autobus66.service.Autobus66Service.AlarmReceiver"
static 因为内部类的实例具有对包含类的包含实例的隐式引用。您不能在包含类的实例方法之外创建内部类的非静态实例,因为java需要指向包含该类的实例的指针。
这意味着您必须找到一些方法来保持应用程序的状态。另请注意,可能会终止并重新启动任何进程(包括服务和活动),并且应编写应用程序以便终止进程不会导致数据丢失。 (我不是说它很好,我说是这样。)