web-dev-qa-db-ja.com

残念ながら、ネットワークの確認中にアプリが停止します

次のコードを使用して、アプリ全体でインターネット接続を確認しています。

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に印刷されません。

私がしている間違いは何ですか?

19
Beginner

注:対象としている場合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);
    }
}

64
Dhaval Parmar

上記のコードは、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. ");
    }
}
6
shreedhar bhat

Android 7.0(APIレベル24)以降をターゲットとするアプリは、マニフェストでブロードキャストレシーバーを宣言している場合、このブロードキャストを受信しません。アプリがBroadcastReceiverをContext.registerReceiver( )そしてそのコンテキストはまだ有効です。

https://developer.Android.google.cn/reference/Android/net/ConnectivityManager.html?hl=zh-cn#CONNECTIVITY_ACTION

1
BJDM