当前位置:首页 » 安卓系统 » android获取定位权限

android获取定位权限

发布时间: 2023-05-18 10:26:15

㈠ Android 6.0 扫描不到 Ble 设备需开启位置权限

最近总是有用户反馈说APP扫描不到设备,让我很费解了一段时间,尤其是华为和OPPO,公司还专门买了这款手机,然后测试没问题,直到一个偶然,我把手机定位给关了,才发现这个问题,Android 6.0 扫描设备需开启位置权限,用户突然一天把定位给关了,我们在扫描之前又没检测,唉,一个逻辑不严谨就会出现各种问题,现在记录一下

权限获取

<uses-permission android:name="android.permission.BLUETOOTH"/> 使用蓝牙所需要的权限

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 使用扫描和设置蓝牙的权限(申明这一个权限必须申明上面一个权限)

在Android5.0之前,是默认申请GPS硬件功能的。而在Android 5.0 之后,需要在manifest 中申明GPS硬件模块功能的使用。

<!-- Needed only if your app targets Android 5.0 (API level 21) or higher. -->

    <uses-feature android:name="android.hardware.location.gps" />

在 Android 6.0 及以上,还需要打开位置权限。如果应用没有位置权限,蓝牙扫描功能不能使用(其它蓝牙操作例如连接蓝牙设备和写入数据不受影响)

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

除了上面的设置之外,如果想设置设备只支持 BLE,可以加上下面这句话

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

同样,如果不想添加 BLE 的支持,那么可以设置 required="false"

然后可以在运行时判断设备是否支持 BLE,

// Use this check to determine whether BLE is supported on the device. Then

    // you can selectively disable BLE-related features.

    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {

        Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();

        finish();

    }

打开定位 (Location)

首先检查定位是否打开,可以像下面这样操作:

/**

* Location service if enable

*

* @param context

* @return location is enable if return true, otherwise disable.

*/

public static final boolean isLocationEnable(Context context) {

    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    boolean networkProvider = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    boolean gpsProvider = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

    if (networkProvider || gpsProvider) return true;

    return false;

}

如果定位已经打开,可以搜索到 ble 设备;如果定位没有打开,则需要用户去打开,像下面这样:

private static final int REQUEST_CODE_LOCATION_SETTINGS = 2;

private void setLocationService() {

    Intent locationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

    this.startActivityForResult(locationIntent, REQUEST_CODE_LOCATION_SETTINGS);

}

进入定位设置界面,让用户自己选择是否打开定位。选择的结果获取:

@Override

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

    if (requestCode == REQUEST_CODE_LOCATION_SETTINGS) {

        if (isLocationEnable(this)) {

            //定位已打开的处理

        } else {

            //定位依然没有打开的处理

        }

    } else super.onActivityResult(requestCode, resultCode, data);

}

安卓手机怎么查看哪些软件获取了定位手机权限

安卓手机怎么芹禅尺查看哪些软件获取了定位手机权限呢?下面我来教大家。

  • 01

    首先,我们打嫌高开我们的手机,然后我们点击设置;

  • 02

    弹出的界面,我们点击应用和通知;

  • 03

    弹出的界面,我们点击权限管理;

  • 04

    弹出的界面,我们点击权限;

  • 05

    弹出的界面,袭裂我们点击读取位置信息;

  • 06

    在里面我们就可以看到具体有哪些软件应用获取了定位手机权限了,如图所示。

㈢ 在android studio 中 获取的经纬度,没有显示,logcat说缺少定位权限是什么原因

<饥枯uses permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission..ACCESS_FINE_LOCATION" />
6.0以上可能需要动态烂衫洞添加塌饥权限

㈣ android应用获取定位,怎么判断操作结果

在Android中得到当前位置的步骤 1.在AndroidManifest.xml中声明权限android.permission.ACCESS_FINE_LOCATION(或者android.permission.ACCESS_COARSE_LOCATION)

2.声明并实例化一个LocationManager对象 这个类提供了关于获取位置信息的服务,用于管理Android的定位服务。这个类允许应用定期的更新地理位置信息,同时允许当到达指定地点时候激活相关的Intent。LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

3.声明并设置Criteria对象。 这个类是用来选择合适的provider的,他设置了一些条件,通过对这些条件进行筛闹咐选,系统得到最优的provider对象。条件有:精度,耗电量,海拔,乱弯迹方位,速度以及付费情况等。Criteria criteria=new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); //精度要求:
ACCURACY_FINE(高)ACCURACY_COARSE(低)
criteria.setAltitudeRequired(false); // 不要求海拔信息
criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH); //方位信息的精度要求:
ACCURACY_HIGH(高)ACCURACY_LOW(低)
criteria.setBearingRequired(false); // 不要求方位信息
criteria.setCostAllowed(true); // 是否允许付费
criteria.setPowerRequirement(Criteria.POWER_LOW); // 对电量的要求哗并 (HIGH、MEDIUM)

㈤ 为什么Android应用会多次请求定位权限

安装Android应用会提示各自权限。一个众所周知、也令人不解的现象是许多中国开发的Android应用热衷要求超出其需求的权限,如一个地理位置信息服务需要访问友晌GPS等信息我们能理解,但要访问电话呼叫就令人不解了;一个视频播放应用访问防休眠功能能理解谈告羡,但为什么要含拍读取系统日志?亚马逊应用商店一项值得称赞的功能是公开了应用所需要的权限,不需要你下载安装后才知道它需要哪些权限,查看一下国内应用的权限需求,你可能会觉得许多开发商都在从事个人信息收集业务,如:PPTV网络电视、新浪视眼都需要访问较低级别的系统日志文件--系统日志包括了时间戳和所有活动信息,你可以知道Android用户在什么时候做了什么运行了什么程序。

㈥ android使用高德定位sdk获取的城市名称怎样让其他的界面进行调用

第一步,我们需要下载SDK
第二步,解压后,将jar包放进libs文件夹中,并加入环境变量中。

第三步,在AndroidManifest.xml文件中配置权限:
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>

并在application标签中添加:
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="你申请的key" />
<service android:name="com.amap.api.location.APSService" />

第四步,测试代码:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;

public class MainActivity extends AppCompatActivity {
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明定位回调监听器
public AMapLocationListener mLocationListener = new MyAMapLocationListener();
//声明AMapLocationClientOption对象
public AMapLocationClientOption mLocationOption = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}

private void init() {
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
//初始化AMapLocationClientOption对象
mLocationOption = new AMapLocationClientOption();
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//获取一次定位结果:
//该方法默认为false。
mLocationOption.setOnceLocation(false);

//获取最近3s内精度最高的一次定位结果:
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
mLocationOption.setOnceLocationLatest(true);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(false);
//关闭缓存机制
mLocationOption.setLocationCacheEnable(false);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();

}

private class MyAMapLocationListener implements AMapLocationListener {

@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
Log.e("位置:", aMapLocation.getAddress());
} else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
}
}
}
}
}

㈦ android 怎么判断定位权限

PackageManager pm = getPackageManager();
boolean flag = (PackageManager.PERMISSION_GRANTED ==
pm.checkPermission("android.permission.RECORD_AUDIO", "packageName"));
if (flag) {
//有这个权限,做相应处理
}else { //没有权限
}

㈧ android 百度地图怎么获取不到GPS定位

原因:
1丶检查手机是否有明显的碰撞痕迹,可能是由于手机进行了碰撞而导致手机的GPS损坏从而无法进行定位。有的人手机摔了之后无线网就不能用了,或者蓝牙不能开,都是因为手机碰撞造成的。

2丶进入网络地图的APP,检查是否是最新版本的APP手机应用,如果不是,请及时进行更新,如果是经常处在wifi环境下,可以勾选wifi环境下自动更新的选项。

3丶在手机的安全中心中,查看是否给了网络地图APP的权限,如果没有的话,可以打开,这样一来,手机授权网络地图GPS定位服务,从而使网络地图可以定位自己的位置。

4丶检查一下自己下的网络地图APP是否是真正的官方授权的正版软件。

㈨ android如何获取地理位置

三种方式进行定位,获取用户位置,分别是基于基站定位, 网络定位,GPS定位。
1.基站定位(passive):这是基于网络基站进行定位的,定位的精确度在几十米到几千米不等,在城市中基站覆盖率比较高,推荐使用基站定位,如果是在郊区,基站相距较远,基站的覆盖没有城里好,定位的误差比较大。如果在郊区不推荐使用基站定位。
2.网络定位:wifi定位,网络定位
3.GPS定位:与卫星进行通信。手机中嵌入了GPS模块(精简版的A-GPS),通过A-GPS搜索卫星, 获取经纬度。使用GPS的弊端是:必须站在空旷的地方,头顶对着天空,如果云层厚了,也会受到一定的影响。精确度:10-50米
扩展知识:
使用Android是定位必备的权限:
< uses-permission android:name= " android.permission.ACCESS_FINE_LOCATION " /> //精确定位
<uses-permission android:name= "android.permission.ACCESS_MOCK_LOCATION" /> //模拟器
<uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION" /> //粗糙定位

//获取定位管理对象
LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);
String[] names=lm.getAllProviders();//获取所有的位置提供者,一般三种

Criteria criteria=new Criteria();//查询条件,如果设置了海拔,则定位方式只能是GPS;
criteria.setCostAllowed(true);//是否产生开销,比如流量费
String provider=lm.getBaseProvider(criteria,true)//获取最好的位置提供者,第二个参数为true,表示只获取那些被打开的位置提供者

lm.requestLocationUpdates(provier,0,0,new LocationListener(){});//获取位置。第二个参数表示每隔多少时间返回一次数据,第三个参数表示被定位的物体移动每次多少米返回一次数据。

private class MyLocationListener implements LocationListener {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override

@Override
public void onLocationChanged(Location location) {
System. out.println( "服务中位置监听发送了变化了" );
float accuracy = location.getAccuracy(); // 精确度
double altitude = location.getAltitude(); // 海拔
double latitude = location.getLatitude(); // 纬度
double longitude = location.getLongitude(); // 经度
String locationInfo = "jing:" + longitude + ",wei:" + latitude + ",haiba:" + altitude + ",jingque:" + accuracy;
Editor edit = sp.edit();
edit.putString( "location", locationInfo);
edit.commit();
}
} public void onProviderDisabled(String provider) {

}

㈩ Android开发,刚进入时被用户关闭定位权限,然后怎么又在后面打开

Activity中requestPermissions是用来再次请求权限的,调用之前要先用checkSelfPermission检查铅搏权限是否已经获取,activity重写onRequestPermissionsResult方法来监听请求的结果,还有方法来判断是否需要自己定义请求权限的说明窗口。而且Android6.0之后权限管理机制有变化了,有些权限必须在代码中去请求,你的app兼容6.0及以上的话你就要去了解这部分知识。建议你去Github上搜Nammu去看看,这个开源槐运祥库就是处理权限悄谨请求这些事的,你可以用这个库来方便自己。

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:333
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:374
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:610
java用什么软件写 发布:2025-05-18 03:56:19 浏览:31
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:940
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:738
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:802
网卡访问 发布:2025-05-18 03:35:04 浏览:510
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:371