2015-09-11 13 views
5

Android geliştirmede tamamen yeniyim, ancak daha önce Java (ve diğer programlama dilleri) ile çalıştım.Neden AndroidManifest izinleri benim uygulamada ayarlanmadı

Uygulamamı geliştirmek için Android Studio kullanıyorum ve Konum bilgilerine (http://developer.android.com/training/location/index.html) erişme konusunda geliştirici eğitimini takip ederken takıldım. Ben Konum hizmetleri android.permission.ACCESS_COARSE_LOCATION ve/veya android.permission.ACCESS_FINE_LOCATION izinler gerektirdiğini biliyoruz ama benim ApplicationManifest başvurumun ekleyerek üzerine hala sorun yaşıyorsanız insanların diğer bazı örneklerine rastlamak ettik

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

SecurityException çöküyor, ancak bu genellikle yanlış yerleştirme (java.lang.SecurityException: Requires ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission), yanlış yazım (ACCESS_FINE_LOCATION AndroidManifest Permissions Not Being Granted) veya izin dizesinin yanlış büyük harf kullanımı sonucu olmuştur. İşte

Hatta uygulama bir HTTP sunucusu ile iletişim kurmak için gerekli olduğu gibi bu gerçekleştireceği (diğer SecurityExceptions neden olur olmadığını görmek için ACCESS_NETWORK_STATE ve INTERNET kaldırmak denedim

<?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> 

benim ApplicationManifest.xml olduğunu başarıyla) Konum bilgisi almak için girişimler alır.

AndroidManifest'teki izinlere yaptığım değişiklikler programı çalıştırdığım zaman güncelleştirilmiyor gibi görünüyor. Ayrıca Build menüsünü kullanarak uygulamayı temizlemeyi ve yeniden oluşturmayı denedim.

UPDATE:

Aktivite çekirdek; Ben

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

Bu programı bir taklitçide çalıştırıyor musunuz? – Actiwitty

+0

Şu ana kadarki aktivitede hangi kod var? – fractalwrench

+0

Evet, uygulama test için bir emülatörde çalıştırılıyor. API/SDK 23 sürümünü kullanan bir x86 platformunda Nexus 5'e dayanmaktadır. –

cevap

1

kontrol bu 3 bağlantılar (örneğin onCreateOptionsMenu() ve onBackPressed() onlar Konum ilgisi olmayan olduğunca) ilgisiz yöntemlerden bazılarını kaldırdık. Onlar yardımcı olabilecek -

  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
  4. yorumlarda sizin aktardığı gibi

-

tehlikeli bir koruma seviyesi ile

izinleri zamanında verilmiş olması gerekir kullanıcıyı SDK 23'ten itibaren sorarak ve sadece Manifest'te tanımlanamaz daha fazla