android 6.0运行时权限检测和从网络上获取数据方法

今天完成两件事:1、android 6.0运行时权限检测。2、从网络上获取气象数据并转换为weatherData。下面分别对这两件事对应的知识点进行整理。
一、运行时权限检测。
android 6.0开始,默认情况下应用没有任何权限去执行对其它应用、操作系统、用户有不利影响的操作,这涉及到android 6.0的安全体系结构(Security Architecture),也是android安全体系的核心。android 6.0中,权限分为普通权限和运行时权限。
1、普通权限。只需在manidest中申明,系统会自动授予这些权限。
2、运行时权限。同样需要先在manifest中申明,但用户可以明确选择允许或者拒绝这些申请。
经过今天的实验,android 6.0的运行时权限检测不会影响在6.0以下的系统中的运行。
运行时权限检测的方法:
1、在Manifest中申明权限。
2、在需要用到相应权限的地方申请权限
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED){//判断是否被授予这项权限
            //如果没有,则申请
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},FINE_LOCATION_REQUEST_CODE);
        }else {
            //如果有,执行相应操作。locate current city and get it's weather

            getLocalCityWeather();
        }
3、判断用户是否同意权限申请
  @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode==FINE_LOCATION_REQUEST_CODE && grantResults[0]==PackageManager.PERMISSION_GRANTED){
            getLocalCityWeather();
        }else {
            startCityListActivity();
        }
    }

二、从网络上获取气象数据并填充到weatherData中。
涉及两个知识点:
(一)从网络获取数据:android http请求方式之一HttpURLConnection,除了这种,还有一种HttpClient,已经被谷歌弃用。在android 4.4版本中HttpURLConnection已经被替换成了OkHttp。一般实际开发并不会用HttpURLConnection和HttpClient,使用第三方网络请求框架,诸如:Volley,android-asny-http,loopj等 ,因为网络操作涉及到异步以及多线程,自己动手写很麻烦,简单的网络数据获取还是要以用HttpURLConnection的。
1、HttpURLConnection介绍:一种多用途,轻量级的HTTP客户端,使用它来进行HTTP操作适用于大多数程序 。继承自URLConnection类,抽象类,无法直接实例化对象。通过调用openConnection()方法获得对象实例,默认是带gzip压缩的。
2、HttpURLConnection的使用步骤
创建一个URL对象:URL url = new URL(http://www.baidu.com);
调用URL对象的openCollection():HttpURLConnection connection = url.openConnection();
设置http请求方法get或者post:connection.setRequestMethod("GET");
设置连接超时以及服务器希望得到的一些信息:connection.setConnectionTimeout(6*1000);connection.setReadTimeout(6*1000);
调用getInputStream()方法获得服务器返回的输入流:InputStream in = connection.getInputStream();
关闭连接:connection.disconnect();

(二)JSON数据解析:主要用到两个类,JSONObject和JSONArray。这里这要掌握了JSON数据的格式就可以很方便的用这两个类来解析JSON数据。不过实际开发中也用诸如Gson,Fastjson,jackson等第三方库。JSON数据格式很简单,名称:值 或者 名称:{值对}(和结构体的格式很像),名称:[数组值/值对]。

相关参考文档:

http://blog.csdn.net/fancylovejava/article/details/26102635

http://www.runoob.com/w3cnote/android-tutorial-json.html
http://www.runoob.com/w3cnote/android-tutorial-httpurlconnection.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值