权限申请帮助类(百度定位)

package com.example.mycitylocation;

import android.Manifest;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;

/**
* 类描述:权限申请帮助类
* 创建日期: 2017/3/20 0020 下午 4:36
* 更新日期:
*/
public class PermissionHelper {

private PermissionModel[] permissionModels = {
new PermissionModel(1, Manifest.permission.READ_PHONE_STATE, "识别身份"),
new PermissionModel(2, Manifest.permission.ACCESS_FINE_LOCATION, "定位"),
new PermissionModel(3, Manifest.permission.ACCESS_COARSE_LOCATION, "定位"),
new PermissionModel(3, Manifest.permission.WRITE_EXTERNAL_STORAGE, "定位"),
};
private Activity activity;
private OnAlterApplyPermission listener;

public PermissionHelper(Activity activity) {

this.activity = activity;
}

/**
* 申请的权限是否全部授予过
*
* @return true:全部授予了
*/
public boolean isAllApplyPermission() {
if (permissionModels != null && permissionModels.length != 0) {
for (PermissionModel permissionModel : permissionModels) {
if (ContextCompat.checkSelfPermission(activity, permissionModel.permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
return false;
}

/**
* 动态申请权限
*/
public void applyPermission() {
for (PermissionModel permissionModel : permissionModels) {
//如果没有授予过,再申请
if (ContextCompat.checkSelfPermission(activity, permissionModel.permission) != PackageManager.PERMISSION_GRANTED) {
//申请
ActivityCompat.requestPermissions(activity, new String[]{permissionModel.permission}, permissionModel.requestCode);
return;
}
}
if (listener != null) listener.OnAlterApplyPermission();

}

/**
* 根据权限获取对应的说明
*
* @param permission
* @return
*/
private String findPermissionExplain(String permission) {
for (PermissionModel permissionModel : permissionModels) {
if (permissionModel.permission.equals(permission)) {
return permissionModel.explain;
}
}
return "";
}

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {//用户没有同意
//二次申请,二次申请的时候回多一个"不再提示"的checkBox
//二次申请的时候需要告诉用户为什么需要这权限
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[0])) {//用户拒绝了
AlertDialog.Builder builder = new AlertDialog.Builder(activity).setTitle("权限申请")
.setMessage(findPermissionExplain(permissions[0]))
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
applyPermission();
}
});
builder.setCancelable(false);
builder.show();
} else {
//引导用户去应用设置页面手动开启权限
AlertDialog.Builder builder = new AlertDialog.Builder(activity).setTitle("权限申请")
.setMessage("在应用设置页面打开:" + findPermissionExplain(permissions[0]) + "权限")
.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
openAppPermissionSettrings();
}

})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
activity.finish();
}
});
builder.setCancelable(false);
builder.show();
}
return;
}
if (isAllApplyPermission() && listener != null) {
listener.OnAlterApplyPermission();
} else {
applyPermission();
}
}

/**
* 打开应用的设置界面
*/
private void openAppPermissionSettrings() {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + activity.getPackageName()));
intent.addCategory(Intent.CATEGORY_DEFAULT);
activity.startActivityForResult(intent, 3);

}

public static class PermissionModel {
String permission;
String explain;
int requestCode;

public PermissionModel(int requestCode, String permission, String explain) {
this.permission = permission;
this.explain = explain;
this.requestCode = requestCode;
}
}

public void setOnAlterApplyPermission(OnAlterApplyPermission listener) {

this.listener = listener;
}

public interface OnAlterApplyPermission {
void OnAlterApplyPermission();
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (isAllApplyPermission() && listener != null) {
listener.OnAlterApplyPermission();
} else {
applyPermission();
}

}
}

时间: 2024-11-16 14:23:32

权限申请帮助类(百度定位)的相关文章

Android6.0权限申请工具类

Android6.0以上,有部分权限是需要申请的.共9组,只要一个权限申请成功默认这一组的权限也申请成功,看下图: 权限申请工具类如下: 1 package com.example.android_lianshou_as.utils; 2 3 import android.Manifest; 4 import android.app.Activity; 5 import android.content.DialogInterface; 6 import android.content.Inten

Android 6.0权限申请

 一.6.0发布权限变化 1.Android需要手动加入权限申请原因: 1)权限分为了两类:一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动.访问网络等:另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard.访问通讯录等. Normal Permissions如下 ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCES

几行代码轻松实现百度定位和在地图显示指定坐标

MapAndLocate 几行代码实现定位.以及根据经纬度在地图上具体位置.定位采用的是百度定位.地图显示采用的是搜搜地图.为什么这么做,因为结合着两者:定位准确,体积最小. 项目地址: https://github.com/Pluckypan/MapAndLocate 截图 useage 第一步:在AndroidManifest.xml文件中分别填写 在 百度定位开放平台申请的API_KEY 以及在腾讯搜搜地图开放平台申请的KEY <!-- 百度定位 --> <meta-data an

Android之百度定位API使用

API版本: 百度定位API:V5.0(http://developer.baidu.com/map/wiki/index.php?title=android-locsdk/guide/v5-0) 百度Geocoding API:V2.0(http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-geocoding#7..E9.80.86.E5.9C.B0.E7.90.86.E7.BC.96.E7.A0.81.E

百度地图(SDK v3.1.1)和百度定位(SDKv4.2)的实现!

</pre>需要使用百度地图的服务,你必须先创建一个百度开发者账号.每个账号就可以创建20个可以使用服务的应用.<p></p><p><span style="color:rgb(98,98,98); font-family:微软雅黑,Helvetica,Arial,sans-serif; line-height:20px">armeabi文件夹.</span>首先当然是导入库文件,在项目中建立libs文件夹,在li

使用百度定位Api获取当前用户登录地址

最近在做一个商城项目,客户想把网站做成类似于美团的效果,切换地区时,内容也跟随变化.这就要首先解决根据用户id获得地址的问题,最终决定使用百度定位(不适用于搭建反向代理的项目) String url = request.getRemoteAddr(); // url = "58.56.23.118"; //本地代码测试ip,使用本地公网 // 这里调用百度的ip定位api服务 详见 ak需要申请 // http://api.map.baidu.com/lbsapi/cloud/ip-l

Android开发----百度定位的相关代码

百度定位联网权限 <!-- 这个权限用于进行网络定位 -->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >    </uses-permission>    <!-- 这个权限用于访问GPS定位 -->    <uses-permission android:name="android.permission.AC

Android 6.0 动态权限申请注意事项

<span style="font-size:24px;color:#ffff00;background-color: rgb(0, 0, 153);"><strong>Android 6.0 权限区分</strong></span> Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应用以获

百度定位VS高德定位

高德  下载 添加 AMap_Location  jar包,在AndroidManifest 添加权限,并在 application下 添加申请到的 key 这里还可以添加service,不过我发现不添加也没有影响 <service android:name="com.amap.api.location.APSService"></service> 之后就可以使用定位了,定位得到的 AMapLocation 对象 直接tostring就能得到所有的定位信息. i