1

私はアンドロイドスタジオを初めて利用しています。以前はアンドロイドスタジオで仕事をしていましたが、うまくいきましたが、現在は6人で許可を得ることができません。方法が間違っています。私は自分のモバイルで利用可能なアクセスポイントのリストを使用するアプリを作っています。しかし、私は許可されていますが、私のアプリは私にwifiのリストを表示しませんが、同じコードは以前のバージョンでうまく機能します。WIFIにアクセスするためのアクセス許可6

Mainactivity: 

package com.wiferange.wifi_test; 

import android.Manifest; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.content.pm.PackageManager; 
import android.net.wifi.ScanResult; 
import android.net.wifi.WifiManager; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Gravity; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 
ListView lv; 
String lists[]={"a","b"}; 
WifiManager wifi; 
String wifis[]; 
WifiScanReceiver wifiReciever; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    lv = (ListView)findViewById(R.id.listView); 
    wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE); 
    wifiReciever = new WifiScanReceiver(); 

    getPermission(); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
         } 
    }); 

} 

protected void onPause() { 
    unregisterReceiver(wifiReciever); 
    super.onPause(); 
} 

protected void onResume() { 
    registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
    super.onResume(); 
} 
private void getPermission() { 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.ACCESS_WIFI_STATE) != PackageManager.PERMISSION_GRANTED){ 
     requestPermissions(new String[]{Manifest.permission.ACCESS_WIFI_STATE},0x12345); 
     // lv.setAdapter(new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,lists)); 
     //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method 
    }else{ 
     wifi.startScan(); 

     //do scanning, permission was previously granted; or legacy device 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { //funcitno executes when some permission was granted 
    if (requestCode == 0x12345) { 
     for (int grantResult : grantResults) { 
      if (grantResult != PackageManager.PERMISSION_GRANTED) { //check if permission was already grnated and start scannig if yes 
       wifi .startScan() ; 
       return; 
      } 
     } 
     getPermission(); //ask for permission if not given 
    } 
} 

private class WifiScanReceiver extends BroadcastReceiver { 
    public void onReceive(Context c, Intent intent) { 
     List<ScanResult> wifiScanList = wifi.getScanResults(); 
     wifis = new String[wifiScanList.size()]; 

     for(int i = 0; i < wifiScanList.size(); i++){ 
      wifis[i] = ((wifiScanList.get(i)).toString()); 
     } 

     lv.setAdapter(new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,wifis)); 

    } 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

マニフェスト:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.wiferange.wifi_test"> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

親切に私はこの問題を解決するのに役立ちます。前もって感謝します !!!!

+1

あなたは を追加してみてくださいでした。<使用許可アンドロイドを:名前= "android.permission.INTERNETあなた" />と<使用許可アンドロイド:名= "android.permission.ACCESS_NETWORK_STATEの" /> マニフェストに指定されたパーミッション以外のもの? – vidulaJ

+0

それはどちらもうまく動作しません、私のコンパイラは私のget permissionメソッドを入力しません –

答えて

6

不適切な実行時アクセス権を要求しています。あたりとしてAndroid 6.0 changes

のBluetoothとWi-Fiのスキャンを経由して近くの外部デバイスのハードウェア識別子にアクセスするには、あなたのアプリが今ACCESS_FINE_LOCATIONまたはACCESS_COARSE_LOCATION権限

あなたが要求しなければならないと付与されている必要がありますWi-Fiスキャンを実行するための実行時アクセス許可の1つ。

0

権限が自動的に許可リストにある場合、または危険な権限リストにある場合は、その権限を調べる必要があります。それが危険なアクセス許可リストに含まれていた場合は、アンドロイドのような実行時アクセス許可を必要とするよりもそうです。 これはちょっと行ってます。link間違った実行時アクセス権を要求しています。 ACCESS_WIFI_STATE権限には、自動的に許可が与えられ、実行時にアクセスする必要はありません。

0

それは が細かい場所や粗い場所のいずれかであるように、あなたの場所にアクセスする必要があるのAndroid 6.0から 接続をスキャンし、私は私に次のよう を追加したときには、WifiManagerとうまく動作するためには思えますマニフェストファイル:

私はこれがあなたが必要と考えるものです。
Application (WiFi connections) doesn't work anymore on Android 6.0 Marshmallow

関連する問題