2016-09-07 101 views
0

我試圖讓我的位置(經度和緯度)使用Skyhook。 我成功構建它。Android - 如何修復權限異常

import android.app.IntentService; 
import android.content.Intent; 
import android.location.Address; 
import android.location.Geocoder; 
import android.os.Environment; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 

import com.reader.ebook.commomUtill.CommonUtill; 
import com.reader.ebook.wxpos.IntergratedLocationManager; 
import com.reader.ebook.wxpos.LocationObj; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

public class LocationService extends IntentService { 

    String TAG = "Location_tag"; 

    public LocationService() { 
     super(LocationService.class.getSimpleName()); 
    } 

    public IntergratedLocationManager er; 

    public Handler _handlerForStartSearch = new Handler(){ 
     @Override 
     public void handleMessage(final Message msg){ 
      switch(msg.what){ 
       case 0: 
        er.getPos(); 
        _handlerForStartSearch.sendEmptyMessageDelayed(0, CommonUtill.updateRate); 
        break; 
       case IntergratedLocationManager.ILM_LOCATION_MESSAGE: 
        final LocationObj loc = (LocationObj) msg.obj; 

        try{ 
         float current_latitude = loc._latitude; 
         float current_longitude = loc._longitude; 
         CommonUtill.setCoordination(current_latitude, current_longitude); 

        }catch (Exception e){ 
         e.printStackTrace(); 
        } 

        break; 
      } 
     } 
    }; 
... 
} 

但我沒有得到我的位置。 相反,我得到一個Exception

java.lang.SecurityException: caller does not have permission to access phone state 

我試圖解決這個2天,但我不適合回答。

請幫幫我。

+0

在哪個版本的android中您正在測試此代碼? – Prashant

+2

@Prashant低於6,因爲在6中您會得到更具體的例外 –

回答

2

根據該Exception,你錯過了READ_PHONE_STATE權限。

以下行添加到您的清單:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

由於此權限的protectionLeveldangerous,在API級別23+,你可能需要在運行時要求此權限。

檢查this link在運行時權限。

+0

感謝您的幫助。 –

1

對於訪問位置,您必須添加下列權限在您的清單:

<uses-permission-sdk-23 android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

1

我覺得你的測試它棉花糖設備上如果是這樣,那麼你可能需要在活動開始或申請許可一些特定的按鈕按下。

首先確保你已經在清單

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

和棉花糖及以上的運行時間許可的整合加入此權限可以更容易一些有用的庫很多,我最喜歡的一個是PermissionUtils

所有你需要做的是編譯依賴於應用級build.gradle

dependencies { 
    compile 'rebus:permission-utils:1.0.3' 
} 

然後在活動

PermissionManager.with(YourActivity.this) 
    .permission(PermissionEnum.READ_PHONE_STATE) 
    .askagain(true) 
    .ask(); 

和多數民衆贊成它的onCreate。你可以找到更多的信息here

希望它有幫助。

相關問題