首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android -如何修复权限异常

Android -如何修复权限异常
EN

Stack Overflow用户
提问于 2016-09-07 19:04:22
回答 3查看 3.1K关注 0票数 1

我正在尝试使用Skyhook获取我的位置(经度和纬度)。我成功地构建了它。

代码语言:javascript
复制
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

代码语言:javascript
复制
java.lang.SecurityException: caller does not have permission to access phone state

我试着解决这个问题2天了,但我没有合适的答案。

请帮帮我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-07 19:06:51

根据该Exception,您缺少READ_PHONE_STATE权限。

将以下行添加到清单中:

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

由于此权限的protectionLeveldangerous,因此在API级别的23+上,您可能需要在运行时请求此权限。

查看运行时权限的this link

票数 2
EN

Stack Overflow用户

发布于 2016-09-07 19:22:33

我想你是在一个棉花糖设备上测试它,如果是这样的话,你可能需要在活动开始时或按下某个特定的按钮时请求许可。

首先,确保您在清单中添加了此权限

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

对于棉花糖和更高版本,使用一些有用的库可以更容易地集成运行时权限,我最喜欢的库是PermissionUtils

您需要做的就是在应用程序级别的build.gradle中编译依赖项

代码语言:javascript
复制
dependencies {
    compile 'rebus:permission-utils:1.0.3'
}

然后在你的活动的onCreate

代码语言:javascript
复制
PermissionManager.with(YourActivity.this)
    .permission(PermissionEnum.READ_PHONE_STATE)
    .askagain(true)
    .ask();

就是这样。你可以在here上找到更多信息。

票数 2
EN

Stack Overflow用户

发布于 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"/>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39368186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档