0

アプリでBroadcastReceiverを使用してインターネット接続状態を取得しようとしています。インターネットが利用できない場合は、AlertDialogボックスを表示したいと思います。

これが私のBroadcastReceiverです:

   public class ConnectivityChangedReceiver extends BroadcastReceiver{

  @Override
  public void onReceive( Context context, Intent intent )
  {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE );
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
    } else {
        showInternetAlertDialog(context);
    }
  }

  public void showInternetAlertDialog(Context context){
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setMessage("You have no internet connection.")
                    .setPositiveButton("Retry", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                                dialog.dismiss();
                            }
                        }
                    });
        builder.show();
        return;
    }    
 }

マニフェストでもこのレシーバーを定義しました。マニフェストでネットワーク状態にアクセスするためのアクセス許可を定義しました。

    <receiver android:name="com.lisnx.service.ConnectivityChangedReceiver"
        android:label="NetworkConnection">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
    </receiver>

しかし、インターネットがなくなってAlertDialogボックスを開こうとすると、次の例外が発生します。

  10-19 16:25:21.474 E/AndroidRuntime( 6864): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

  10-19 16:25:21.474 E/AndroidRuntime( 6864):     at android.view.ViewRoot.setView(ViewRoot.java:509)

  10-19 16:25:21.474 E/AndroidRuntime( 6864):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)

  10-19 16:25:21.474 E/AndroidRuntime( 6864):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)

  10-19 16:25:21.474 E/AndroidRuntime( 6864):     at android.app.Dialog.show(Dialog.java:241)

コンテキストの問題だと思いますが、正確に何が問題なのかわかりません。これについて私を助けてください。任意の解決策をいただければ幸いです。よろしくお願いします。

4

1 に答える 1

1

AlertDialogから表示することはできませんBroadCast Receiver.

BroadCast Receiverからいくつかのアクティビティを開始する必要があり、そのアクティビティでAlertDialogを表示する必要があります。

ダイアログテーマをアクティビティに設定することも、そのアクティビティに透過的なレイアウトを提供することもできます。

編集 :

FLAG_ACTIVITY_NEW_TASKインテントフラグを使用して新しいアクティビティを開始するようにしてください。

于 2012-08-31T15:02:17.193 に答える