当我在其自己的文件中有下面的AlarmReceiver类时,将记录日志语句并调用onReceive方法。我需要让我的BroadcastReceiver成为一个内部类,所以我可以从我的Activity中调用getFragmentManager()。但是,当我将它作为我的主Activity类的内部类时,它不会被调用。那是为什么?
public class MainActivity extends Activity {
public class AlarmReceiver extends BroadcastReceiver { //this needs to be an inner class to access the activity
@Override
public void onReceive(Context arg0, Intent arg1) {
Log.d("BROADCAST","RECEIVED");
//start a new activity, an alarm has gone off
AlarmFragment alarmFragment=new AlarmFragment();
// getFragmentManager().beginTransaction().replace(R.id.container, alarmFragment).commit();
}
}
public void setAlarm(){
Intent intentAlarm = new Intent(this, AlarmReceiver.class);
//Get the Alarm Service
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Long currentTime = new GregorianCalendar().getTimeInMillis();
//DEBUG TIME
alarmManager.set(AlarmManager.RTC_WAKEUP,currentTime+7500,PendingIntent.getBroadcast(this,1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
}
}
答案 0 :(得分:-1)
为什么?
你有关于如何发送和接收广播机制的重大根本错误:
您向警报管理员提供PendingIntent
以开始广播,但在实践中 - 您提供意图而不指定任何操作。
在没有动作的情况下发送广播毫无意义!!!
您应该在intentAlarm
对象中添加一个标识广播的自定义操作字符串,并以编程方式向您的AlarmReceiver
接收者注册处理此自定义操作的IntentFilter:
Intent intentAlarm = new Intent(CUSTOM_ACTION_STRING);
....
....
(你应该保留对AlarmReceiver类的一个实例的引用。那就是mAlarmReceiver ...)
添加到广播的活动onResume()
回调注册:
@Override
public void onResume() {
super.onResume();
registerReceiver(mAlarmReceiver , new IntentFilter(CUSTOM_ACTION_STRING));
}
不要忘记取消注册接收者:
@Override
public void onPause() {
unregisterReceiver(mAlaramReceiver);
super.onPause();
}
答案 1 :(得分:-1)
请将您的活动类更改为FragmentActivity,并使用上下文对象进行访问,如下面的代码所示。
arg0.getFragmentManager().beginTransaction().replace(R.id.container, alarmFragment).commit();
这是一个尝试。请告诉我您的反馈意见。