2017-10-24 10 views
0

実際には、受信者経由でバックグラウンドでネットワーク接続を確認しようとしています。 コーディングはすべてOKです。許可の問題を示しています。 私を助けてください。無線アクセスにアクセスするためのセキュリティ例外

以下は私のコードです。

NetworkChangeReceiver:

public class NetworkChangeReceiver extends BroadcastReceiver 

{

public static final String NETWORK_AVAILABLE_ACTION = "com.onnurinet.NetworkAvailable"; 
public static final String IS_NETWORK_AVAILABLE = "isNetworkAvailable"; 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    try 
    { 
     if (isOnline(context)) { 
      // dialog(true,context); 
      Toast.makeText(context,"connection is there",Toast.LENGTH_SHORT).show(); 
      Log.e("TAG", "Online Connect Intenet "); 
     } else { 
      //dialog(false,context); 
      Log.e("TAG", "Conectivity Failure !!! "); 
      Toast.makeText(context,"Could not Connect to internet",Toast.LENGTH_SHORT).show(); 
     } 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
} 

private boolean isOnline(Context context) { 
    try { 

     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     //should check null because in airplane mode it will be null 
     return (netInfo != null && netInfo.isConnected()); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

}

BroadcastEventクラス:

public class BroadcastEvent extends Activity { 

Boolean networkStatus; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    /*int permissionCheck = ContextCompat.checkSelfPermission(BroadcastEvent.this, 
      Manifest.permission.ACCESS_NETWORK_STATE);*/ 
    IntentFilter intentFilter = new IntentFilter(NetworkChangeReceiver.NETWORK_AVAILABLE_ACTION); 
    LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      boolean isNetworkAvailable = intent.getBooleanExtra(IS_NETWORK_AVAILABLE, false); 
      networkStatus = Boolean.valueOf(isNetworkAvailable ? "connected" : "disconnected"); 
      if(networkStatus){ 
       Toast.makeText(getApplicationContext(),"Network Status: " + networkStatus, Toast.LENGTH_SHORT).show(); 
      }else { 
       Toast.makeText(getApplicationContext(),"Network Status: " + networkStatus, Toast.LENGTH_SHORT).show(); 
      } 
      // Toast.makeText(getApplicationContext(),"Network Status: " + networkStatus, Toast.LENGTH_SHORT).show(); 
      //Snackbar.make(findViewById(R.id.activity_main), "Network Status: " + networkStatus, Snackbar.LENGTH_LONG).show(); 
     } 
    }, intentFilter); 

} 

}

マニフェストファイル:

<?xml version="1.0" encoding="utf-8"?> 

<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true" /> 

<supports-screens 
    android:anyDensity="true" 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
    android:xlargeScreens="true" /> 

//------------------------------STBService--------------------------------------- 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 


<uses-permission android:name="ANDROID.PERMISSION.INTERNET" /> 
<uses-permission android:name="ANDROID.PERMISSION.ACCESS_NETWORK_STATE" /> 

<application 
    android:allowBackup="true" 
    android:hardwareAccelerated="false" 
    android:icon="@mipmap/airstream_logo" 
    android:label="@string/app_name" 
    android:name=".MyApplication" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".HomeMainActivity" 
     android:screenOrientation="portrait" 
     android:theme="@style/Theme.AppCompat.NoActionBar" /> 


    <activity 
     android:name=".BroadcastEvent" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name="com.onnurinet.receivers.NetworkChangeReceiver"> 

     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
     </intent-filter> 
    </receiver> 

私のコードをチェックして、私は間違いを行っている場所を教えてみてください。私はプロジェクトをきれいにし、googleでチェックするが、私はまだ問題を取得していない。

エラー:

10-24 15:13:16.601 19293-19293/com.onnet.airstream W/System.err: java.lang.SecurityException: ConnectivityService: Neither user 10405 nor current process has android.permission.ACCESS_NETWORK_STATE. 

10-24 15:13:16.601 19293から19293/com.onnet.airstreamのW/System.errの:android.os.Parcel.readException(Parcel.java:1546で) 10-24 15:13:16.601 19293-19293/com.onnet.airstream W/System.err:android.os.Parcel.readException(Parcel.java:1499) 10-24 15:13:16.601 19293 -19293/com.onnet.airstream W/System.err:android.net.IConnectivityManager $ Stub $ Proxy.getActiveNetworkInfo(IConnectivityManager.java:964) 10-24 15:13:16.601 19293-19293/com.onnet。 airstream W/System.err:android.net.ConnectivityManager.getActiveNetworkInfo(ConnectivityManager.java:610) 10-24 15:13:16.601 19293-19293/com.onnet.airstream W/System.err:com.onnurinet.receivers.NetworkChangeReceiver.isOnline(NetworkChangeReceiver.java:41) 10-24 15:13:16.601 19293-19293/com.onnet.airstream W/System.err:com.onnurinet.receivers.NetworkChangeReceiver.onReceive(NetworkChangeReceiver.java:23) 10-24 15:13:16.601 19293-19293/com.onnet.airstream W/System.err:android.app.ActivityThread.handleReceiver(ActivityThread.java:2642) 10-24 15:13:16.601 19293-19293/com.onnet.airstream W/System.err:android.app。 ActivityThread.access $ 1800(ActivityThread.java:154) 10-24 15:13:16.601 19293-19293/com.onnet.airstream W/System.err:android.app.ActivityThread $ H.handleMessage(ActivityThread.java: 1398) 10-24 15:13:16.602 19293-19293/com.onnet.airstream W/System.err:android.os.Handler.dispatchメッセージ(Handler.java:102) 10-24 15:13:16.602 19293-19293/com.onnet.airstream W/System.err:at android.os.Looper.loop(Looper.java:135) 10- 24 15:13:16.602 19293-19293/com.onnet.airstream W/System.err:android.app.ActivityThread.main(ActivityThread.java:5292) 10-24 15:13:16.602 19293-19293/com .net.airstream W/System.err:java.lang.reflect.Method.invoke(ネイティブメソッド) 10-24 15:13:16.602 19293-19293/com.onnet.airstream W/System.err:at java .lang.reflect.Method.invoke(Method.java:372) 10-24 15:13:16.602 19293-19293/com.onnet.airstream W/System.err:com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:904) 10-24 15:13:16.602 19293-19293/com.onnet。気流W/System.errの:com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

+0

何エラーですか? –

+0

質問でスタックトレースを共有します。 –

+0

更新された質問 – Mounika

答えて

0

を実装する必要が

<uses-permission android:name="ANDROID.PERMISSION.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="ANDROID.PERMISSION.INTERNET" /> 

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

で私はあなたの場合は、実行時のアクセス許可

read this

を実装する必要があると思いますデバイスがAndroid 5.1以下を実行している、またはアプリのターゲットSDKが22以下:マニフェストに危険な権限をリストする場合、ユーザーはアプリのインストール時に権限を与えなければなりません。彼らが許可を与えない場合、システムはアプリケーションをまったくインストールしません。

デバイスがAndroid 6.0以降を実行していて、アプリのターゲットSDKが23以上の場合:アプリはマニフェストに権限をリストする必要があり、アプリケーションの実行中に必要な危険なアクセス権をそれぞれ要求する必要があります。ユーザーは各権限を付与または拒否することができ、ユーザーが権限要求を拒否しても機能は制限されたままアプリケーションを実行し続けることができます。

注:Android 6.0(APIレベル23)から、アプリが低いAPIレベルをターゲットにしていても、いつでもどのアプリからでも権限を取り消すことができます。アプリケーションがどのAPIレベルをターゲットにしているかにかかわらず、必要な権限が不足しているときに正しく動作するかどうかをテストする必要があります。

+0

を受信者またはアクティビティファイルに許可してください。 – Mounika

+0

あなたのメインアクティビティでは、テスト目的でWiFiの状態 – Girish

+0

にアクセスする前に、設定 - >アプリ - > [あなたのアプリ名] - >アクセス許可 – Girish

0

あなたは、Android 6.0または(APIレベル> = 23)の上(サポート)を実行している場合は、その後、あなたのコードに変更しRequesting Permissions at Run Time

関連する問題