2015-09-11 5 views
5

Ich bin komplett neu in Android-Entwicklung, aber ich habe mit Java (und anderen Programmiersprachen) gearbeitet.Warum sind AndroidManifest Berechtigungen nicht in meiner Anwendung

Ich bin mit Android Studio meine Anwendung zu entwickeln, und ich habe festkleben, wenn sie auf den Zugriff auf Informationen über den Standort (http://developer.android.com/training/location/index.html), um den Entwickler Tutorial folgen. Ich verstehe, dass die Standortdienste die android.permission.ACCESS_COARSE_LOCATION benötigen und/oder android.permission.ACCESS_FINE_LOCATION Berechtigungen aber auf sie meine ApplicationManifest meine Anwendung hinzufügen stürzt immer noch mit einem Security

java.lang.SecurityException: Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to perform any location operations. 

ich über mehrere andere Fälle von Menschen gekommen sind, Schwierigkeiten haben, aber diese sind in der Regel das Ergebnis von falschem Platzieren (java.lang.SecurityException: Requires ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission), falscher Schreibweise (ACCESS_FINE_LOCATION AndroidManifest Permissions Not Being Granted) oder falscher Großschreibung der Berechtigungszeichenfolge.

Hier ist meine ApplicationManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="scd.tt" > 

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

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="23" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher_tt_v2" 
     android:label="@string/app_name" 
     android:theme="@style/TT_Theme"> 
     <activity 
      android:name=".MainActivity" 
      android:theme="@style/TT_Theme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".LoginActivity" android:theme="@style/TT_Theme.NoActionBar" /> 
     <activity android:name=".IndexActivity" /> 
    </application> 

</manifest> 

ich selbst zu entfernen ACCESS_NETWORK_STATE und INTERNET zu sehen, habe versucht, wenn diese andere SecurityExceptions verursachen würde als die Anwendung mit einem HTTP-Server zu kommunizieren (die es erforderlich ist, führt erfolgreich), bevor versucht wird, Standortinformationen zu erhalten.

Es scheint, als ob Änderungen an den Berechtigungen auf dem AndroidManifest nicht aktualisiert werden, wenn ich das Programm ausführen. Ich habe auch versucht, die Anwendung mit dem Menü Erstellen zu bereinigen und neu zu erstellen.

UPDATE:

Hier ist der Kern der Aktivität; Ich habe einige der nicht verwandten Methoden (wie onCreateOptionsMenu() und onBackPressed(), da sie nichts mit dem Ort zu tun haben)

package scd.tt; 

import android.app.AlertDialog; 
import android.app.Fragment; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.location.Location; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationListener; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 

import java.util.Map; 

/** 
* Created by Liam on 08/09/2015 
*/ 
public class IndexActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { 

    private GoogleApiClient mGoogleApiClient; 
    private LocationRequest mLocationRequest; 
    private Location mLastLocation; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_index); 
     if(debug) Log.d(TAG, "onCreate() called: savedInstanceState is " + (savedInstanceState == null ? "null" : "not null")); 

     mLocationRequest = new LocationRequest(); 
     mLocationRequest.setInterval(10000); 
     mLocationRequest.setFastestInterval(1000); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 
     buildGoogleApiClient(); 

     if (findViewById(R.id.index_fragment_container) != null) { 
      if (savedInstanceState != null) return; 

      Fragment index = new IndexFragment(); 
      index.setArguments(getIntent().getExtras()); 

      getFragmentManager().beginTransaction().add(R.id.index_fragment_container, index).commit(); 
     } 
    } 


    @Override 
    protected void onStart() { 
     super.onStart(); 
     mGoogleApiClient.connect(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     mGoogleApiClient.disconnect(); 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 
     if(debug) Log.d(TAG, "onConnected"); 
     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     startLocationUpdates(); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     if(debug) Log.d(TAG, "Connection Suspended"); 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     if(debug) Log.d(TAG, "Connection Failed"); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     mLastLocation = location; 
    } 

    protected synchronized void buildGoogleApiClient() { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 
     if(debug) Log.d(TAG, "buildGoogleAPIClient()"); 
    } 

    protected void startLocationUpdates() { 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
    } 
} 
+0

Laufen Sie dieses Programm auf einem Emulator? – Actiwitty

+0

Welchen Code haben Sie bisher in Ihrer Aktivität? – fractalwrench

+0

Ja, die Anwendung wird in einem Emulator zum Testen ausgeführt. Es basiert auf dem Nexus 5 auf einer x86-Plattform mit API/SDK Version 23. –

Antwort

1

Schauen Sie sich diese 3 Links entfernt. Sie könnten helfen -

  1. Android - Unable to get the gps location on the emulator
  2. ACCESS_FINE_LOCATION permission error emulator only
  3. http://www.gitshah.com/2011/02/android-fixing-no-internet-connection.html

Wie in den Kommentaren von Ihnen zitiert -

Berechtigungen mit einem Schutzgrad von gefährlichen muss zur Laufzeit gewährt werden, durch Aufforderung des Benutzers von SDK 23 und kann nicht ausschließlich im Manifest definiert werden nicht mehr.

Verwandte Themen