Donc, j'ai un récepteur de diffusion qui fonctionne très bien. Le problème est que quand il est appelé, je ne peux pas changer de fragments car ma classe étend BroadcastReceiver et non Activity ou Fragment. Par conséquent, je n'ai pas accès à getFragmentManager() ou getSupportFragmentManager(). Je ne sais pas comment procéder et toute aide est appréciée.Changement de fragment de broadcastreceiver
classe 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();
}
}
Merci! J'ai cependant une question à régler. puisque cela inclut onReceive(), cela signifie-t-il que je devrais changer mon manifeste pour désigner cette activité en tant que récepteur? – 2JZIgnition
Non car vous l'enregistrez seulement pour le cycle de vie de l'activité. Je suppose que les diffusions seraient envoyées par les destinataires enregistrés Manifest, correct? – Toochka
J'ai mis à jour mon post avec mon cours MainActivity en suivant vos conseils. Ma classe BroadcastReceiver semble fonctionner correctement, comme le Toast que je montre quand son appelé est en cours d'exécution, mais mon onReceive dans mon activité ne semble pas appeler. Pourrait-il être possible que j'ai 2 méthodes onReceive et ne devrait en avoir qu'un? – 2JZIgnition