1

私は現在、ネットワークの可用性(wifiと3Gの両方)をチェックするAndroidアプリケーションを実行しています。アクティビティで完全に機能するコードがあります。しかし、私は放送受信機でそれが必要です。ネットワークが利用可能なときに何らかの操作を行いたい。私は許可を持っています

助けてください.....

コードを以下に示します...

 ConnectivityManager cm =   (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

 if ( cm.equals(ConnectivityManager.EXTRA_NO_CONNECTIVITY))
    {

  Log.v("CONNECT", "CONNECTED");
    }
 else
 {
  Log.v("CONNECT", "NOT CONNECTED"); 

 }

`

4

3 に答える 3

1

次のように宣言された BroadcastReceiver クラスがある場合:

public class NetConnectionBroadcastReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        final ConnectivityManager cm = (ConnectivityManager) 
            context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        if (networkInfo == null)
            Log.v("CONNECT", "NOT CONNECTED");
        int netType = networkInfo.getType();
        if (netType == ConnectivityManager.TYPE_WIFI)
        {
            Log.v("CONNECT", "CONNECTED TO WIFI");
        }
        else if (netType == ConnectivityManager.TYPE_MOBILE)
        {
            Log.v("CONNECT", "CONNECTED TO MOBILE" + 
                    (networkInfo.isRoaming() ? " ROAMING!" : ""));
        }
    }
}

そのインスタンスをアクティビティ内に保存でき、イベントonCreateの場合はメソッドに登録できます。android.net.conn.CONNECTIVITY_CHANGE

private final  NetConnectionBroadcastReceiver receiver = 
        new NetConnectionBroadcastReceiver();
public void onCreate(Bundle savedInstanceState)
{
    // ... your onCreate implementation goes here 
    final IntentFilter intentFilter = 
        new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
    this.registerReceiver(this.receiver, intentFilter);
}

データ接続が変更されると、受信側のonReceiveメソッドが呼び出されます。どのような変化が起こったのか、内側から調べることができます。

このチェックでは、android.permission.ACCESS_NETWORK_STATEパーミッション以外は必要ありません。

于 2012-05-17T09:41:02.367 に答える
1

BroadcastReceiver接続ステータスが変更されたときにトリガーされる を作成する必要があります

public class BroadCastSampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.registerReceiver(this.mConnReceiver,
                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }
    private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
            boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);

            NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

            if(currentNetworkInfo.isConnected()){
                Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
            }else{
                Toast.makeText(getApplicationContext(), "Not Connected", Toast.LENGTH_LONG).show();
            }
        }
    };
}

次に、AndroidManifest で、接続があるかどうかを確認できます。

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

詳細 ソースコードダウンロード

于 2012-05-17T09:41:30.267 に答える
-1
private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }
于 2012-05-17T09:55:04.763 に答える