スクリーンのON時にFragmentDialog作成

スクリーンをOnにした時のイベントを取得した時

private BroadcastReceiver screenStatusReceiver = new BroadcastReceiver() {//スクリーンのON/OFFイベントを検出する
    @Override
    public void onReceive(Context context, Intent intent) {
        // Receive screen off


        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // OFF
            LoginTimeSave();


        }
        if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // ON fragmentだとIllegalStateExceptionでる
            LoginReqired();
        }
    }
};

でやるのだが、この時fragmentを生成しようとすると

java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.SCREEN_ON flg=0x50000010 } in com.medicalmonitor.MainActivity$20@451d81d0

Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

が出て強制終了してしまう。

onSaveInstanceState()はonPause()/onStop()の直後に発生するから、onPause()からonResume()の間に操作しなければ解決する。

結果的にcommitAllowingStateLossを使うことで解決できた。

でもこれActivityが再構築された時とかにおかしくなるからあんまり使わないほうがいいらしい。まぁとりあえずこれで様子見。

Fragment prev = getSupportFragmentManager().findFragmentByTag("DigLogin");
if (prev == null) {//これがないと何個もダイアログ作られる

    //Dialog_LoginReqired newFragment = Dialog_LoginReqired.newInstance(null);
    //newFragment.show(getSupportFragmentManager(), "DigLogin");//DigDrugはTAG findFragmentByTagでみつけれる

    Dialog_LoginReqired dialog = new Dialog_LoginReqired();
    //dialog.show(getSupportFragmentManager(), null);
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(dialog, "DigLogin");
    ft.commitAllowingStateLoss();

}

↓弊社で開発、販売しているソフトウェアです↓

MediMonitor無料ダウンロード  

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です