-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メソッドを持っている可能性がありますが、1つだけ持っている必要がありますか? – 2JZIgnition