次のコードを使用して、アプリ全体でインターネット接続を確認しています。
public class ConnectionChangeReceiver extends BroadcastReceiver
{
@Override
public void onReceive( Context context, Intent intent )
{
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService( Context.CONNECTIVITY_SERVICE );
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE );
if (activeNetInfo != null)
{
Toast.makeText( context, "Active Network Type : " +
activeNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
}
if(mobNetInfo != null)
{
Toast.makeText( context, "Mobile Network Type : " +
mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
}
}
}
また、マニフェストファイルで必要な権限を定義しました。
F8キーを使用してネットワークを-切断/接続しようとするたびに、 "UNFORTUNATELY APP HAS STOPPED"が表示されます。で、logcat
に印刷されません。
私がしている間違いは何ですか?
注:対象としている場合Android Nプレビュー。上のレシーバーは、Googleによる制限付きでは機能しません。
リンク: https://developer.Android.com/preview/features/background-optimization.html#connectivity-action
使用:WorkManagerまたはJobScheduler.
これをAndroidManifest.xml
に追加しましたか?
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>
上記を追加した場合は、次のコードを確認してください。
<receiver Android:name=".UpdateReceiver" >
<intent-filter>
<action Android:name="Android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
そして
public class UpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE );
NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting();
if (isConnected)
Log.i("NET", "Connected" + isConnected);
else
Log.i("NET", "Not Connected" + isConnected);
}
}
上記のコードは、wi-fi接続で正しく機能していませんでした。これは修正された
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
androidmanifest.xmlのアプリケーションタグ内
<receiver Android:name="Android.YOUR-Java-CLASS-PATH.BackgroundSync" Android:enabled="true">
<intent-filter>
<action Android:name="Android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
BackgroundSync.Java
import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
import Android.net.ConnectivityManager;
import Android.util.Log;
import Android.widget.Toast;
public class BackgroundSync extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo()!=null){
Toast.makeText(context, "Connected to Internet", Toast.LENGTH_LONG).show();
}
else Log.i("INTERNET","---------------------> Internet Disconnected. ");
}
}
Android 7.0(APIレベル24)以降をターゲットとするアプリは、マニフェストでブロードキャストレシーバーを宣言している場合、このブロードキャストを受信しません。アプリがBroadcastReceiverをContext.registerReceiver( )そしてそのコンテキストはまだ有効です。