2016-10-18 5 views
2

Die permissionsList.add() funktioniert nicht, aber MainActivity.this.requestPermissions() funktioniert einwandfrei. Das Problem besteht darin, dass ein Dialogfeld angezeigt wird, in dem Sie gefragt werden, ob der Benutzer die Standortberechtigung zulässt.Android 6.0.1 - Berechtigungsproblem = wifiManager.getScanResults() gibt 0

Warum das Hinzufügen der Berechtigung nicht funktioniert?

Gibt es eine Möglichkeit, das Dialogfeld zu vermeiden?

Siehe mein minimaler Code unten:

public class MainActivity extends AppCompatActivity { 
WifiManager wifiManager; 
WifiBroadcastReceiver broadcastReceiver; 

Context context; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    context = getApplicationContext(); 

    List<String> permissionsList = new ArrayList<String>(); 
    permissionsList.add(Manifest.permission.ACCESS_FINE_LOCATION); 
    permissionsList.add(Manifest.permission.ACCESS_COARSE_LOCATION); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if(checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
       checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      MainActivity.this.requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 100); 
      MainActivity.this.requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 100); 
      } 
     } 

     Button scan = (Button) findViewById(R.id.scan); 

     wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
     wifiManager.setWifiEnabled(true); 

     scan.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       if(wifiManager != null) 
        wifiManager.startScan(); 
      } 
     }); 


     broadcastReceiver = new WifiBroadcastReceiver(); 

     // On attache le receiver au scan result 
     registerReceiver(broadcastReceiver, new IntentFilter(
       WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 

    } 

    public class WifiBroadcastReceiver extends BroadcastReceiver { 

     private WifiManager wifiManager; 


     @Override 
     public void onReceive(Context context, Intent intent) { 
      wifiManager = ((MainActivity) context).getCurrentWifiManager(); 
      List<ScanResult> listeScan = wifiManager.getScanResults(); 
      } 
    } 


    public WifiManager getCurrentWifiManager() { 
     return wifiManager; 
    } 

} 

Und hier ist der manifest.xml:

Antwort

1

in Android 6.0 Beginning (API-Ebene 23), gewähren Benutzer Berechtigungen zu Apps während die App läuft, nicht wenn sie die App installieren. Dieser Approach optimiert den App-Installationsprozess, da der Benutzer keine Berechtigungen erteilen muss, wenn er die App installiert oder aktualisiert. Es gibt auch dem Benutzer mehr Kontrolle über die Funktionalität der App; Zum Beispiel könnte ein Benutzer wählen, um einer Kamera-App Zugriff auf die Kamera zu geben, aber nicht zum Gerätestandort. Der Benutzer kann die Berechtigungen unter einer beliebigen Zeit widerrufen, indem er zum Bildschirm Einstellungen der App geht.

Ressourcen und mehr zu lesen:

+0

Dieses verstanden wird. Aus diesem Grund füge ich die Berechtigungen am Anfang des Codes hinzu. Das hat nicht funktioniert. Nur die Anfrageberechtigung funktioniert. Der Nachteil ist das Dialogfeld, in dem der Benutzer aufgefordert wird, die Berechtigungen zuzulassen/zu verweigern. – narb

+0

Soweit ich weiß, gibt es keine Arbeit in Bezug auf das Dialogfeld. –

+0

RE-lesen Sie Ihren Punkt, das ist nur die Wahl der Anfrage und nicht hinzufügen. Warum gibt es eine Add-Methode? Es sieht für mich so aus, dass ich mich bei der Installation einer App mit einer Kamera bei der Installation erkundige. Ist der Standort besonders? Ich lese das Dokument erneut. – narb

Verwandte Themen