2015-09-11 13 views
5

Tôi hoàn toàn mới phát triển Android, nhưng trước đây tôi đã làm việc với Java (và các ngôn ngữ lập trình khác).Tại sao các quyền AndroidManifest không được đặt trong ứng dụng của tôi

Tôi đang sử dụng Android Studio để phát triển ứng dụng của mình và tôi đã gặp khó khăn khi làm theo hướng dẫn dành cho nhà phát triển về cách truy cập thông tin Vị trí (http://developer.android.com/training/location/index.html). Tôi hiểu rằng các dịch vụ Vị trí yêu cầu các android.permission.ACCESS_COARSE_LOCATION và/hoặc android.permission.ACCESS_FINE_LOCATION quyền nhưng khi thêm chúng vào ApplicationManifest ứng dụng của tôi của tôi vẫn còn bị treo với một SecurityException

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

Tôi đã đi qua một số trường hợp khác của người gặp khó khăn, nhưng những nói chung là kết quả của việc đặt sai (java.lang.SecurityException: Requires ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission), sai chính tả (ACCESS_FINE_LOCATION AndroidManifest Permissions Not Being Granted) hoặc viết hoa không chính xác của chuỗi quyền.

Đây là ApplicationManifest.xml tôi

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

Tôi thậm chí đã cố gắng để loại bỏ ACCESS_NETWORK_STATE và INTERNET để xem nếu điều này sẽ gây ra SecurityExceptions khác như các ứng dụng được yêu cầu phải giao tiếp với một máy chủ HTTP (mà nó thực hiện thành công) trước khi nó được cố gắng để có được thông tin vị trí.

Dường như việc sửa đổi tôi thực hiện đối với quyền trên AndroidManifest không được cập nhật khi tôi chạy chương trình. Tôi cũng đã cố gắng làm sạch và xây dựng lại ứng dụng bằng cách sử dụng trình đơn Xây dựng.

CẬP NHẬT:

Đây là cốt lõi của Hoạt động; Tôi đã gỡ bỏ một số phương pháp không liên quan (ví dụ như onCreateOptionsMenu() và onBackPressed() khi họ không có gì để làm với Địa điểm)

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

Bạn có đang chạy chương trình này trên trình giả lập không? – Actiwitty

+0

Bạn đã có mã nào trong hoạt động của mình cho đến thời điểm này? – fractalwrench

+0

Có, ứng dụng đang được chạy trong trình giả lập để kiểm tra. Nó dựa trên Nexus 5 trên nền tảng x86 sử dụng phiên bản API/SDK 23. –

Trả lời

1

Kiểm tra các liên kết 3. Họ có thể giúp -

  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

Theo trích dẫn của bạn trong ý kiến ​​-

Quyền với một mức độ bảo vệ nguy hiểm phải được cấp trong thời gian chạy bằng cách nhắc người dùng làm SDK 23 và không thể được xác định chỉ trong Tệp kê khai nữa không.

Các vấn đề liên quan