我正在尝试使用Skyhook获取我的位置(经度和纬度)。我成功地构建了它。
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天了,但我没有合适的答案。
请帮帮我。
发布于 2016-09-07 19:06:51
根据该Exception
,您缺少READ_PHONE_STATE
权限。
将以下行添加到清单中:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
由于此权限的protectionLevel
为dangerous
,因此在API级别的23+上,您可能需要在运行时请求此权限。
查看运行时权限的this link。
发布于 2016-09-07 19:22:33
我想你是在一个棉花糖设备上测试它,如果是这样的话,你可能需要在活动开始时或按下某个特定的按钮时请求许可。
首先,确保您在清单中添加了此权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
对于棉花糖和更高版本,使用一些有用的库可以更容易地集成运行时权限,我最喜欢的库是PermissionUtils。
您需要做的就是在应用程序级别的build.gradle
中编译依赖项
dependencies {
compile 'rebus:permission-utils:1.0.3'
}
然后在你的活动的onCreate
中
PermissionManager.with(YourActivity.this)
.permission(PermissionEnum.READ_PHONE_STATE)
.askagain(true)
.ask();
就是这样。你可以在here上找到更多信息。
发布于 2016-09-07 19:20:52
要访问位置,您必须在清单中添加以下权限:
<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"/>
https://stackoverflow.com/questions/39368186
复制相似问题