この投稿は長く見えるかもしれません。しかし、それは非常に簡単です。だから助けてください。ありがとう。
つまり、Wi-Fiからモバイルへの接続の変更があるたびに、ブロードキャストレシーバーで2回メッセージを受信します(初めてネットワークが見つかりません)。そして、モバイルからWifiに移行すると、3回受信します。誰かが私にこの奇妙な行動を説明してもらえますか?
IntentFilterConnectivityManager.CONNECTIVITY_ACTIONを使用してコードを実装し、レシーバーに登録しました。
IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
private final BroadcastReceiver mNetworkStateReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
//The Network State has Been Changed
Log.d(TAG, "CHANGE HAPPENED" );
if (networkInfo != null)
{
Log.d(TAG, "Connected To: " + networkInfo.getTypeName());
Log.d(TAG, "NUMBER: " + networkInfo.getType());
Log.d(TAG, "isConnectedOrConnecting: " + networkInfo.isConnectedOrConnecting());
Log.d(TAG, "isConnected: " + networkInfo.isConnected());
Log.d(TAG, "isFailover: " + networkInfo.isFailover());
Log.d(TAG, "Reason :" + networkInfo.getReason());
Log.d(TAG, "Details " + networkInfo.getDetailedState() );
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);
Log.d(TAG, "noConnectivity: " + noConnectivity);
Log.d(TAG, "reason: " + reason);
Log.d(TAG,"DONE");
}
}
};
私は以下の振る舞いを観察しました。誰かがこれが起こった理由を説明できますか?
最初、マイデバイスはWifiに接続されています。
これで、APKがデバイスにデプロイされました。
私のLogcatエントリはD/MainActivity(32005)です:変更が発生しましたD / MainActivity(32005):WIFIに接続されています
これは理解できます。
これで、ルーターの電源がオフになります。そのため、デバイスは4Gへの接続を試みます。これで、Logcatエントリは次のようになります。
D / MainActivity(32005):CHANGE HAPPENED D / MainActivity(32005):CHANGE HAPPENED D / MainActivity(32005):Connected to Mobile
これは、最初に接続が切断されたために、CHANGE HAPPENEDが出力されたが、「Connectedto」というメッセージは出力されなかったことが原因である可能性があります。次に、モバイルとの接続が確立され、モバイルに接続すると別の変更が発生します。
これで、ルーターの電源が再びオンになります。
しかし、今回はlogcatが報告します、D / MainActivity(32005):CHANGE HAPPENED
D / MainActivity(32005):WIFIに接続
D / MainActivity(32005):変更が発生しました
D / MainActivity(32005):WIFIに接続
D / MainActivity(32005):変更が発生しました
D / MainActivity(32005):WIFIに接続
Logcatがこのメッセージを3回報告した理由がわかりません。誰かが私がこの振る舞いを理解するのを手伝ってくれませんか。
これは私のmanisfestファイルです。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.wififourghandoff"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
これは私の観察です。
シーケンスは次のようになります:
Wifiからモバイルへ:1。ネットワーク情報がNULLです2. Netowrk Infoオブジェクトが存在し、「reason(networkInfo.getReason()」はdataEnabledです。
モバイルからWifiへ:1。ブロードキャストメッセージを受信しました。2. Netowrk Infoオブジェクトが存在し、 "reason(networkInfo.getReason()"はdataDisabledです。3。 "reason(networkInfo.getReason()"がnullとして存在するNetworkInfo
私のデバイスは最初はWIFIにキャンプされています私のLogcat
D / MainActivity(880):変更が発生しました
D / MainActivity(880):接続先:WIFI
D / MainActivity(880):番号:1
D / MainActivity(880):isConnectedOrConnecting:true
D / MainActivity(880):isConnected:true
D / MainActivity(880):isFailover:false
D / MainActivity(880):理由:null
D / MainActivity(880):詳細が接続されました
D / MainActivity(880):noConnectivity:false
D / MainActivity(880):理由:null
D / MainActivity(880):完了
現在、WIFIはオフになっています。これで、デバイスがモバイルに移行します。以下はLogcatです。
D / MainActivity(880):変更が発生しました
D / MainActivity(880):変更が発生しました
D / MainActivity(880):接続先:モバイル
D / MainActivity(880):NUMBER:0
D / MainActivity(880):isConnectedOrConnecting:true
D / MainActivity(880):isConnected:true
D / MainActivity(880):isFailover:true
D / MainActivity(880):理由:dataEnabled
D / MainActivity(880):詳細が接続されました
D / MainActivity(880):noConnectivity:false
D / MainActivity(880):理由:dataEnabled
D / MainActivity(880):完了
今、私のWIFIがオンになっています。そして、私のデバイスはWifiにキャンプバックします。
D / MainActivity(880):変更が発生しました
D / MainActivity(880):接続先:WIFI
D / MainActivity(880):番号:1
D / MainActivity(880):isConnectedOrConnecting:true
D / MainActivity(880):isConnected:true
D / MainActivity(880):isFailover:false
D / MainActivity(880):理由:null
D / MainActivity(880):詳細が接続されました
D / MainActivity(880):noConnectivity:false
D / MainActivity(880):理由:null
D / MainActivity(880):完了
D / MainActivity(880):変更が発生しました
D / MainActivity(880):接続先:WIFI
D / MainActivity(880):番号:1
D / MainActivity(880):isConnectedOrConnecting:true
D / MainActivity(880):isConnected:true
D / MainActivity(880):isFailover:false
D / MainActivity(880):理由:null
D / MainActivity(880):詳細が接続されました
D / MainActivity(880):noConnectivity:false
D / MainActivity(880):理由:dataDisabled
D / MainActivity(880):完了
D / MainActivity(880):変更が発生しました
D / MainActivity(880):接続先:WIFI
D / MainActivity(880):番号:1
D / MainActivity(880):isConnectedOrConnecting:true
D / MainActivity(880):isConnected:true
D / MainActivity(880):isFailover:false
D / MainActivity(880):理由:null
D / MainActivity(880):詳細が接続されました
D / MainActivity(880):noConnectivity:false
D / MainActivity(880):理由:null
D / MainActivity(880):完了
ありがとう&よろしく、Yuvi