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);
}
}
Laufen Sie dieses Programm auf einem Emulator? – Actiwitty
Welchen Code haben Sie bisher in Ihrer Aktivität? – fractalwrench
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. –