精华内容
下载资源
问答
  • 动态的开启手机权限(获取位置权限)

    千次阅读 2016-12-07 09:34:47
    当Google更新到6.0以后为了用户的安全考虑.增加了权限问题,需要用户自己手动的开启权限.因此对于一些非开发人员,有的时候对于app的使用过程...你也可以添加其他权限信息.还有一个就是activity 工具类: public c

    当Google更新到6.0以后为了用户的安全考虑.增加了权限问题,需要用户自己手动的开启权限.因此对于一些非开发人员,有的时候对于app的使用过程中会感觉到很困惑.一些功能无法使用.因此需要开发者去判断用户手机是否高于6.0,或者api23,如果高于的话就让用户自己去开启权限,代码包含一个封装的工具类.你也可以添加其他权限的信息.还有一个就是activity


    工具类:

    public class UserPermissionUtil {
    
        // 要申请的权限
        //本权限为获取到当前的位置,如果你有需要可以添加其他权限
        public  String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};
        public Dialog dialog;
        //传递过来的activity
       public  Activity mActivity;
    
        /**
         * 构造函数
         * @param mActivity 为传递过来的上下文
         */
        public UserPermissionUtil(Activity mActivity) {
            this.mActivity = mActivity;
        }
    
        /**
         * 判断当前的权限是否满足条件
         */
        public  void getVersion() {
            // 版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取
            if (Build.VERSION.SDK_INT >= M) {
    
                // 检查该权限是否已经获取
                int i = ContextCompat.checkSelfPermission(mActivity, permissions[0]);
                // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
                if (i != PackageManager.PERMISSION_GRANTED) {
                    // 如果没有授予该权限,就去提示用户请求
                   showDialogTipUserGoToAppSettting();
                }
            }
        }
    
        /**
         * 弹出对话框.首都添加权限
         */
        public void showDialogTipUserGoToAppSettting() {
    
            dialog = new AlertDialog.Builder(mActivity)
                    .setTitle("获取当前位置权限")
                    .setMessage("请在-应用设置-权限-中,允许地图获取手机的位置权限")
                    .setPositiveButton("立即开启", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 跳转到应用设置界面
                             goToAppSetting();
                        }
                    })
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                         dialog.dismiss();
                        }
                    }).setCancelable(false).show();
        }
    
    
        /**
         * 跳转到手动开启权限页面
         */
        public void goToAppSetting() {
            //通过意图打开权限页面,手动的开启权限
            Intent intent = new Intent();
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            Uri uri = Uri.fromParts("package", mActivity.getPackageName(), null);
            intent.setData(uri);
            //第二种开启activity的方式,不详细介绍.可以自己查一下
            mActivity.startActivityForResult(intent, 123);
        }
    
    }


    activity的调用,这个地方我使用的是高德地图,使用到工具类的地方用蓝色标注.在代码中,为了给初学者提供一些便利,所有粘贴全部代码.自己

    也是菜鸟,希望各大神指点


    
    public class MainActivity extends AppCompatActivity implements AMapLocationListener {
        private MapView mMapView;
        private AMap aMap;
        private UiSettings mUiSettings;//定义一个UiSettings对象
    
        public double longitude;
        public double latitude;
        //声明AMapLocationClient类对象
        public AMapLocationClient mLocationClient = null;
        //声明定位回调监听器
        public AMapLocationListener mLocationListener = new AMapLocationListener() {
    
    
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                if (aMapLocation != null) {
    
                    if (aMapLocation.getErrorCode() == 0) {
    //可在其中解析amapLocation获取相应内容。
    
    
                        int locationType = aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                        latitude = aMapLocation.getLatitude();
                        longitude = aMapLocation.getLongitude();
                        aMapLocation.getAccuracy();//获取精度信息
                        aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                        aMapLocation.getCountry();//国家信息
                        aMapLocation.getProvince();//省信息
                        aMapLocation.getCity();//城市信息
                        aMapLocation.getDistrict();//城区信息
                        aMapLocation.getStreet();//街道信息
                        aMapLocation.getStreetNum();//街道门牌号信息
                        aMapLocation.getCityCode();//城市编码
                        aMapLocation.getAdCode();//地区编码
                        aMapLocation.getAoiName();//获取当前定位点的AOI信息
                        aMapLocation.getGpsAccuracyStatus();//获取GPS的当前状态
    //获取定位时间
                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        Date date = new Date(aMapLocation.getTime());
                        df.format(date);
    
                        // 设置当前地图显示为当前位置
                        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 15));
                        MarkerOptions markerOptions = new MarkerOptions();
                        markerOptions.position(new LatLng(latitude, longitude));
                        markerOptions.title("当前位置");
                        markerOptions.visible(true);
                        BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.dizhi));
                        markerOptions.icon(bitmapDescriptor);
                        aMap.addMarker(markerOptions);
                    } else {
                        //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                        Log.e("AmapError", "location Error, ErrCode:"
                                + aMapLocation.getErrorCode() + ", errInfo:"
                                + aMapLocation.getErrorInfo());
                    }
                }
            }
        };
    
        //声明AMapLocationClientOption对象
        public AMapLocationClientOption mLocationOption = null;
        private UserPermissionUtil util;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //'首先判断当前的权限问题
    
            util = new UserPermissionUtil(this);
              util.getVersion();
    
            //获取地图控件引用
            mMapView = (MapView) findViewById(R.id.map);
            //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
            mMapView.onCreate(savedInstanceState);
    
            //初始化地图变量
            if (aMap == null) {
    
                aMap = mMapView.getMap();
    
            }
    //        mUiSettings = aMap.getUiSettings();//实例化UiSettings类
    //        mUiSettings.setScaleControlsEnabled(true);//显示比例尺控件
    //
    //        LatLng latLng = new LatLng(latitude, longitude);
    //        final Marker marker = aMap.addMarker(new MarkerOptions().
    //                position(latLng).
    //                title("北京").
    //                snippet("DefaultMarker"));
    //
            MarkerOptions markerOption = new MarkerOptions();
            markerOption.position(latLng);
            markerOption.title("西安市").snippet("西安市:39.906901,116.397972");
    
            markerOption.draggable(true);
    //
    //        Animation animation = new RotateAnimation(marker.getRotateAngle(), marker.getRotateAngle() + 180, 0, 0, 0);
    //        long duration = 1000L;
    //        animation.setDuration(duration);
    //        animation.setInterpolator(new LinearInterpolator());
    //
    //        marker.setAnimation(animation);
    //        marker.startAnimation();
    //        Circle   circle = aMap.addCircle(new CircleOptions().
    //                center(latLng).
    //                radius(10000).
    //                fillColor(Color.argb(50, 1, 1, 1)).
    //                strokeColor(Color.argb(50, 1, 1, 1)).
    //                strokeWidth(15));
            initPosition();
    
    
        }
    
        /**
         * 初始化定位
         */
        private void initPosition() {
            //初始化定位
            mLocationClient = new AMapLocationClient(getApplicationContext());
    //设置定位回调监听
            mLocationClient.setLocationListener(mLocationListener);
    
            //初始化定位参数
            mLocationOption = new AMapLocationClientOption();
            //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置是否返回地址信息(默认返回地址信息)
            mLocationOption.setNeedAddress(true);
            //设置是否只定位一次,默认为false
            mLocationOption.setOnceLocation(true);
            //设置是否强制刷新WIFI,默认为强制刷新
            mLocationOption.setWifiActiveScan(true);
            //设置是否允许模拟位置,默认为false,不允许模拟位置
            mLocationOption.setMockEnable(false);
            //设置定位间隔,单位毫秒,默认为2000ms
    //        mLocationOption.setInterval(2000);
            //给定位客户端对象设置定位参数
            mLocationClient.setLocationOption(mLocationOption);
            //启动定位
            mLocationClient.startLocation();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
            mMapView.onDestroy();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            //在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理
            mMapView.onResume();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            //在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理
            mMapView.onPause();
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理
            mMapView.onSaveInstanceState(outState);
        }
    
        @Override
        public void onLocationChanged(AMapLocation aMapLocation) {
    
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 123) {
    
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    // 检查该权限是否已经获取
                    int i = ContextCompat.checkSelfPermission(this, util.permissions[0]);
                    // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
                    if (i != PackageManager.PERMISSION_GRANTED) {
                        // 提示用户应该去应用设置界面手动开启权限
                        util.showDialogTipUserGoToAppSettting();
                    } else {
                        Toast.makeText(this, "权限获取成功", Toast.LENGTH_SHORT).show();
                        initPosition();
                    }
                }
            }
        }
    }
    


    展开全文
  • Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及...

    Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息


     

    本文目录:

    • 获取手机信息
    • 设置权限
    • 申请权限
    • 查询联系人
    • 获取手机定位信息
    • 调用高德地图,设置显示2个坐标点的位置,以及选择路线

     

    获取手机信息

     

    转载于:https://www.cnblogs.com/licin/p/8267878.html

    展开全文
  • 1谷歌浏览器失败:个人认为是谷歌位置服务被封的原因 2安卓手机失败: 权限配置问题 这个必须开启手机的gps(我是这个原因,之前认为手机位置服务是通过网络ip定位来的看来错了,shit)

    1谷歌浏览器失败:个人认为是谷歌位置服务被封的原因

     

    2安卓手机失败:

    权限配置问题

    这个必须开启手机的gps(我是这个原因,之前认为手机的位置服务是基站定位来的看来错了,shit)

    展开全文
  • 微信小程序授权登录 获取用户信息手机

    万次阅读 多人点赞 2020-01-04 16:34:36
    微信小程序,逐渐向用户个人隐私保护上优化,所以开发记住考虑这点,一切需要获取用户个人隐私的信息都需要得到用户的手动的许可,包括 信息手机号,和用户位置等等,都需要开启相应的权限,以前是用api调用,现在...

    微信小程序授权登录 获取用户信息与手机号

    1. 很多不看文档的总有一些奇葩想法,小程序能直接获取用户信息吗,小程序能直接获取手机号么

      答案是no
      在这里插入图片描述
      公告地址

    微信小程序,逐渐向用户个人隐私保护上优化,所以开发记住考虑这点,一切需要获取用户个人隐私的信息都需要得到用户的手动的许可,包括 信息,手机号,和用户位置等等,都需要开启相应的权限,以前是用api调用,现在基本都在button组件来调用,

    button组件

    1. 现在还能强制登陆吗,

      什么是强制登陆,就是用户进入小程序的第一个启动页面就是登录页,同时,不登陆就无法进入到小程序主体,这就叫做强制登录,

      在2019年的9月1日更新中,就禁止小程序强制登录,简单说,就是启动页不能是登陆页面,同时可以让用户浏览一些页面,你可以让用户在我的中自己登录,或者让一些需要登陆权限的页面,点击后跳转到登录这样是合理的。

    3.登陆流程

    演示
    在这里插入图片描述

    如上图,我们先点击授权按钮,弹出获取用户信息的弹框,然后在弹出自己的弹框用于获取手机,点击后弹出获取手机号的授权弹框,之后就是传给后台,获取的登陆信息

    在这里插入图片描述
    看到上图没用过的,和初学者基本有点蒙圈,上面是阐述的整个流程,前端做的大致如下代码是mpvue的,

    第一步先通过wx.login获取到code这个code,是给后台换取微信服务器登陆凭证的,就是微信的临时token

    正常情况,我们登陆成功后是会存储用户信息和token到storage 所以我们一般会先判断本地是否存储着token,

    有就直接到首页

     login() {
          let me = this
          let obj = wx.getStorageSync('USER_INFO')
          console.log(obj, 'USER_INFOUSER_INFO')
          if (obj) {
            wx.switchTab({ url: "/home/main" })
          } else {
            wx.login({
              success (res) {
                if (res.code) {
                  me.code = res.code
                }
              }
            })
          }
        },
    

    拿到code后按上述流程操作

    第二步通过button组件的获取到用户信息, 上面有button组件文档地址,open-type代表着button的开放能力,

    会自动调起,授权弹框,getuserinfo 绑定的事件,会自动传人一个参数,里面包含了,用户的一些信息包含encryptedData, iv 等敏感信息 ,可以用于拿到unionId,这时可以把获取到的用户信息存到本地

       <button open-type="getUserInfo" @getuserinfo="bindGetUserInfo">确认授权</button>
    
    
    
     //  调用授权页面
        bindGetUserInfo(e) {
           if (!this.cancelAuth) {
            this.isPone = true//显示自定义的获取手机权限提示框
          }
          wx.setStorageSync('USER_MSG', JSON.stringify(e.mp.detail.userInfo))
          console.log(e)
          if (e.mp.detail.userInfo) {
            this.params = {
              code: this.code,
              name: e.mp.detail.userInfo.nickName,
              userIcon: e.mp.detail.userInfo.avatarUrl,
            }
          } else {
            // 用户按了拒绝按钮
               this.cancelAuth = true
          }
        }
      },
    

    第三步步通过button组件的获取到用户的手机号码

    和上述一样 这里有个注意事项,这里获取到信息后也会有个encryptedData, iv ;用于后台解析电话号码,与上面getUserInfo获取的并非相同,注意区别

      <div v-if="isPone" class="alert" >
          <div class="auth">
            <div class="apply">
              <span class="">需要获取您的手机权限</span>
              <p>(请开启手机权限)</p>
            </div>
            <button class="confirm" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">确认</button>
          </div>
        </div>
    /*js*/
      getPhoneNumber(e) {
          console.log(e)
          if (e.mp.detail.errMsg==="getPhoneNumber:ok") {
            this.isPone = false
            this.params.iv = e.mp.detail.iv
            this.params.encryptedData = e.mp.detail.encryptedData
            console.log(this.params)
            this.getTokenAsync(this.params)
          }
        },
    /*scss*/
    .alert{
        position: fixed;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        overflow: hidden;
        outline: 0;
        -webkit-overflow-scrolling: touch;
        background-color: rgb(0, 0, 0);  
        filter: alpha(opacity=60);  
        background-color: rgba(0, 0, 0, 0.6); 
        z-index: 9999;
        .auth{
          position: absolute;
          top: 50%;
          left: 50%;
          width: 80%;
          height: 340rpx;
          border-radius: 20rpx;
          transform:translate(-50%,-50%);
          background: #fff;
          display: flex;
          flex-direction: column;
          .apply{
            margin: 0rpx auto;
            padding: 60rpx 40rpx;
            flex:1;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: space-between;
            font-size: 34rpx;
            color:rgb(34,34,34);
            p{
              font-size:30rpx
            }
          }
          .confirm{
            border-top: 1rpx solid rgb(221,221,221);
            text-align: center;
            height: 100rpx;
            width: 100%;
            line-height: 100rpx;
            font-size: 34rpx;
            color:rgb(255,145,37);
          }
        }
      }
    

    最后一步,将上面获取的数据传给自己的后台,将后台返回的token存储到本地,之后在请求中携带上token即可。

        // 请求后获取token
        async getTokenAsync(params) {
          let res = await getToken(params)
          if (res.success) {
            wx.setStorageSync('USER_INFO', JSON.stringify(res.data))
         wx.switchTab({ url: "/home" })
          } else {
            console.log("获取失败")
          }
        },
    

    完整代码请查看博文

    微信小程序开发mpvue实现授权登录

    展开全文
  • 获取手机的当前地理位置,首先要获得经纬度,然后通过逆地理编码获得位置信息 地理编码/逆地理编码 API 是通过 HTTP/HTTPS 协议访问远程服务的接口,提供结构化地址与经纬度之间的相互转化的能力。 1....
  • 二、解决1、HBuilderX2.5.0+开始支持配置应用启动时申请获取手机存储权限,支持以下三种策略none 应用启动时不申请once 应用第一次启动时申请,用户可以拒绝always 应用每次启动都申请,并且用户必须允许,用户拒绝...
  • 想要获取当前位置,大前提:1、微信允许访问位置信息,2、手机定位开启 所以,我们进入小程序时,要获取位置,需要考虑权限问题。 怎样才能在每次进入都获取,并且大部分用户进入 执行的代码更少?怎样避免每次每人...
  • 辛苦吐血代码大发送:   获取手机基本信息 TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//注意在AndroidManifest中添加权限  ...
  • 手机信息手机号、短信、联系人、通话记录、位置)等都可以通过系统程序的文件共享者获取到。本次将如何获取手机号码。 首先是AndroidMainfest里面的权限注册: 其次是定义并且初始化TelephonyManager,它位于包...
  • 关于在使用百度地图的时候,发现出现蓝屏,由于我的手机是6.0版本,于是我在显示地图的页面添加动态权限以后,可完美解决。在这里查过资料后,给自己做个笔记,也供其他人参考。...//获取位置信息: Manifest.pe
  • 关于Android手机权限

    2015-10-22 22:30:41
    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES,读取...android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 获
  • 在Android Q版本Android进行了许多更新和变化,例如手机的...在Android Q之前的版本,定位权限只需要添加两个权限ACCESS_FILE_LOCATION和ACCESS_COARSE_LOCATION即可获取位置,但是在Android Q版本不行,需要动态...
  • 文章目录问题描述手动解决代码判断获取网络信息的工具类 问题描述 拥有了ACCESS_WIFI_STATE...检查手机是否打开了位置信息,即手机是否允许定位。一般在下拉菜单栏中有个"位置信息"开关。 代码判断 可以使用Locati...
  • ios手机小程序调用wx.chooseLocation接口的时候,获取权限的时候报authorize:fail:require permission desc这样子的错误,这是由于苹果的安全机制导致需要再app.json加上 "permission": { "scope.userLocation...
  • 手机对生活的帮助越来越大了,尤其是手机中的应用更是很好的丰富了我们的...定位权限位置信息 这类权限主要是外卖、地图、出行等应用需要的,但如果不这类应用获取的话,就要考虑清楚,轻易的给出就容易造成位置...
  • Unity发布Android可开启的手机权限

    千次阅读 2017-12-06 09:39:09
    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES,读取或写入登记...android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米
  • 网上约车、购物、叫外卖、导航……从早上睁眼到晚上睡觉,我们每时每刻都在享受着手机App带来的便利。...北京晨报记者下载了30多个App,其中三分之二以上的App要求获取定位权限。猎豹移动安全专家称,App
  • 功能:主要用于在用户通过手机端微信访问第三方H5页面时获取用户的身份信息(openId,昵称,头像,所在地等。。...     开发前的准备: ...具体位置:接口权限-网页服务-网页账号-网页授权获取用户基本信息-修改
  • 一. 解决android6.0以上getScanResults()为空的情况 ...这主要的问题在于android6.0扫描wifi信息必须打开获取位置权限 解决方法: 1.在AndroidManifest.xml添加相应的静态权限 检查自己有没有上述四项权限 &lt;...
  • 移动是手机与手持设备的最大特点,可以通过Eclipse的DDMS视图,...获取位置信息分为三步:    1.添加系统权限,来支持对LBS硬件的访问   Java代码:  2.得到系统服务的LocationManager对象   Java代码
  • android如何获取经纬度

    2013-03-05 10:19:24
    移动是手机与手持设备的最大特点,可以通过Eclipse的DDMS视图,模拟... 获取位置信息分为三步:    1.添加系统权限,来支持对LBS硬件的访问   Java代码:  2.得到系统服务的LocationManager对象   Ja
  • 要想获得WiFi热点信息列表需要打开定位服务,即获取位置信息权限,而在Android 6.0系统中,需要动态获取的权限涉及到: //获取手机状态: Manifest.permission.READ_PHONE_STATE //获取位置信息: Manifest....
  • Android GPS定位 获取经纬度

    千次阅读 2014-02-27 08:34:31
    Android GPS定位 获取经纬度    Android应用服务器Eclipse  移动 是手机与手持设备的最大特点,可以通过Eclipse的DDMS视图,模拟设备的...获取位置信息分为三步: 1. 添加系统权限,来支持对LBS硬件的访问  
  • 经多番查找得知要想获得WiFi热点信息列表需要打开定位服务,即获取位置信息权限,而在Android 6.0系统中,需要动态获取的权限涉及到://获取手机状态:Manifest.permission.READ_PHONE_STATE//获取位置信息:...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 217
精华内容 86
关键字:

手机获取位置信息权限