3

私の問題は次のとおりです。インターネットに接続されていないときにボタンまたはアクティビティ全体をブロックし、インターネット接続に戻ったときにブロックを解除するようにします。私はBroadcastReceiverを使用してメインアクティビティでインターネットをチェックしていますが、うまく機能しています。

public class MainActivity extends BroadCast {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.registerReceiver(this.mConnReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}

// code
}

MainActivityをブロックするには、メソッドsetCancelableをfalseに設定してProgressDialogを使用しています。BroadCastアクティビティ:

public class BroadCast extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    public BroadcastReceiver mConnReceiver = new BroadcastReceiver()
    {
        public void onReceive(Context context, Intent intent)
        {
            @SuppressWarnings("deprecation")
            NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

            if(currentNetworkInfo.isConnected()) {
                BlockActivity(true);
            }
            else {
                BlockActivity(false); 
            }
        }
    };

    public void BlockActivity(Boolean connected)
    {
        final ProgressDialog pausingDialog = ProgressDialog.show(this, "", "Application waiting for internet connection...");

        if (!connected)
        {
            Toast.makeText(getApplicationContext(), "Disconnected", Toast.LENGTH_LONG).show();
            pausingDialog.show();
            pausingDialog.setCancelable(false);
        }
        else
        {
            Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
            pausingDialog.setCancelable(true);
            pausingDialog.dismiss();        
        }
    }
}

トースト情報はうまく機能しますが、問題はProgressDialogにあります。インターネット接続がなくなると表示されますが、インターネット接続が戻ったときに消えたくありません。それを修正する方法は?ありがとう。

4

2 に答える 2

1

ダイアログを再作成し続けないように、ダイアログへのグローバル参照を保持します。booleanまた、可能な場合は (の代わりに)プリミティブ型を使用Booleanし、Java 命名規則 (camelCase) に準拠する必要があります。

ProgressDialog pausingDialog;
public void blockActivity(boolean connected)
    {
        if (pausingDialog == null){
            pausingDialog = new ProgressDialog (this);
            pausingDialog.setMessage ("Application waiting for internet connection...");
        }

        if (!connected)
        {
            Toast.makeText(getApplicationContext(), "Disconnected", Toast.LENGTH_LONG).show();
            pausingDialog.show();
            pausingDialog.setCancelable(false);
        }
        else
        {
            Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
            pausingDialog.setCancelable(true);
            pausingDialog.dismiss();        
        }
    }
于 2013-03-03T17:35:07.040 に答える