-1
所以我有一个广播接收器,工作得很好。问题是,当它被调用时,我不能改变片段,因为我的类扩展了BroadcastReceiver而不是Activity或Fragment。因此,我无法访问getFragmentManager()或getSupportFragmentManager()。我不确定如何继续并得到任何帮助。从broadcastreceiver更改片段
广播接收器类:
package lucaclock.moticlock;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
public static final String numAlarmsPreferences = "numAlarmsPreferences";
public static final String numAlarmsKey = "numAlarmsKey";
public static final String alarm1Preferences = "alarm1Preferences";
public static final String alarm2Preferences = "alarm2Preferences";
public static final String alarm3Preferences = "alarm3Preferences";
public static final String alarm4Preferences = "alarm4Preferences";
public static final String alarmTimeDisplayKey = "alarmTimeDisplayKey";
public static final String alarmTimeRequestedKey = "alarmTimeRequestedKey";
public static final String alarmNameKey = "alarmNameKey";
public static final String alarmOccuranceKey = "alarmOccuranceKey";
public static final String alarmActiveKey = "alarmActiveKey";
public static final String alarmSoundUriKey = "alarmSoundUriKey";
public static final String alarmSoundTitleKey = "alarmSoundTitleKey";
public static final String alarmVolumeKey = "alarmVolumeKey";
public static final String alarmSnoozeKey = "alarmSnoozeKey";
public static final String alarmVisibleKey = "alarmVisibleKey";
public static final String alarmRunningKey = "alarmVisibleKey";
public boolean alarm1Active;
public boolean alarm2Active;
public boolean alarm3Active;
public boolean alarm4Active;
public void onReceive(Context context, Intent intent) {
WakeLocker.acquire(context);
MainActivity mA = new MainActivity();
mA.updateFragment(HomeFragment.class, null);
Toast.makeText(context, "ALARM ACTIVE!!!", Toast.LENGTH_LONG).show();
/*---------------THIS CODE IS RUN WHEN THE ALARM IS ACTIVE----------------------//
//
//------------------------------------------------------------------------------//
*/
//initialize preferences
AppSharedPreferences alarm1Prefs = AppSharedPreferences.getInstance(context, alarm1Preferences);
AppSharedPreferences alarm2Prefs = AppSharedPreferences.getInstance(context, alarm2Preferences);
AppSharedPreferences alarm3Prefs = AppSharedPreferences.getInstance(context, alarm3Preferences);
AppSharedPreferences alarm4Prefs = AppSharedPreferences.getInstance(context, alarm4Preferences);
alarm1Active = alarm1Prefs.getBoolean(alarmActiveKey, false);
alarm2Active = alarm2Prefs.getBoolean(alarmActiveKey, false);
alarm3Active = alarm3Prefs.getBoolean(alarmActiveKey, false);
alarm4Active = alarm4Prefs.getBoolean(alarmActiveKey, false);
}
public void cancelAlarm(Context context)
{
Toast.makeText(context, "Alarm canceled successfully", Toast.LENGTH_LONG).show();
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
AppSharedPreferences mPref = AppSharedPreferences.getInstance(context, alarm1Preferences);
mPref.putBoolean(alarmRunningKey, false);
mPref.putBoolean(alarmActiveKey, false);
WakeLocker.release();
}
}
谢谢!然而,我有一个问题可以调整。因为这包括onReceive(),这是否意味着我将不得不改变我的清单指向这个活动作为接收器? – 2JZIgnition
否,因为您只为活动的生命周期注册它。我认为广播将由Manifest注册的接收器发送,对吗? – Toochka
我按照你的建议,用我的MainActivity类更新了我的帖子。我的BroadcastReceiver类似乎运行良好,因为我所示的Toast在被调用时正在运行,但是我的onReceive在我的活动中似乎没有调用。有可能我有2个onReceive方法,应该只有一个? – 2JZIgnition