标签分类
当前位置:首页 > 移动开发电子书 > Android电子书网盘下载
Android Telephony原理解析与开发指南 Android Telephony原理解析与开发指南
weixin_43264

weixin_43264 提供上传

资源
33
粉丝
11
喜欢
152
评论
7

    Android Telephony原理解析与开发指南 PDF 超清扫描版

    Android电子书
    • 发布时间:

    给大家带来的一篇关于Android相关的电子书资源,介绍了关于Android、Telephony、原理解析、开发指南方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小158.2 MB,杨青平编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:9.4,更多相关的学习资源可以参阅 移动开发电子书、等栏目。

  • Android Telephony原理解析与开发指南 PDF 下载
  • 下载地址:https://pan.baidu.com/s/1fYlOnxp2I4FXQkiubd5TNQ
  • 分享码:k122
  • 内容介绍

    随之Android系统软件服务平台的运用愈来愈普遍,更几十人添加到Android服务平台的订制产品研发贝盛。Android的基础通讯作用是Android系统软件订制的关键控制模块,这书关键紧紧围绕Android Telephony和融合通信2个关键一部分展平。Android Telephony一部分从接打电话、计算机服务、统计数据上外网3个作用分析Telephony。 全书共12章,主题思想包含初识Android、构建Android源码编译调节自然环境、深层次分析语音通话步骤、详细说明Telecom、详细说明TeleService、Voice Call微信语音聊天实体模型、ServiceState计算机服务、Data Call中移动数据业务、SMS & MMS业务流程、Radio Interface Layer)。 这书合适电子计算机科技进步、信息科技、通信工程、计算机专业等技术专业的硕士研究生、大学本科、高职院校大学生应用。

    目录

    • 第1章 初识Android 1
    • 本章小结 8
    • 第2章 搭建Android源代码编译调试环境 9
    • 本章小结 27
    • 第3章 深入解析通话流程 29
    • 本章小结 71
    • 第4章 详解Telecom 73
    • 本章小结 94
    • 第5章 详解TeleService 95
    • 本章小结 123
    • 第6章 Voice Call语音通话模型 125
    • 本章小结 173
    • 第7章 ServiceState网络服务 175
    • 本章小结 206
    • 第8章 Data Call移动数据业务 207
    • 本章小结 235
    • 第9章 SMS&MMS业务 236
    • 本章小结 261
    • 第 10章 Radio Interface Layer 262
    • 本章小结 293

    读书笔记

    Android token过期刷新处理的方法示例

    token

    token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库。

    第一种方案

    通过okhttp提供的Authenticator接口,但是只有HTTP返回码为401时才会触发。此种方式局限性很大,要求后台设计必须符合规范。在实际项目中不可能完美实现。此种方式不做详解,百度很多。

    第二种方案

    根据和后端协商好的返回码处理刷新token步骤。代码如下;

    public class TokenInterceptor implements Interceptor {
    
      @Override
      public Response intercept(Chain chain) throws IOException {
    
        Request.Builder request = chain.request().newBuilder();
        //添加默认的Token请求头
        request.addHeader("Cookie", UserInfo.getInstance().getPhpSessionId());
    
        Response proceed = chain.proceed(request.build());
        okhttp3.MediaType mediaType = proceed.body().contentType();
    
        //如果token过期 再去重新请求token 然后设置token的请求头 重新发起请求 用户无感
        String content = proceed.body().string();
        if (isTokenExpired(content)) {
    
          String newToken = getNewToken();
    
          UserInfo.getInstance().setPhpSessionId(newToken);
          //使用新的Token,创建新的请求
          Request newRequest = chain.request().newBuilder()
              .addHeader("Cookie", newToken)
              .build();
          return chain.proceed(newRequest);
        }
        return proceed.newBuilder()
            .body(okhttp3.ResponseBody.create(mediaType, content))
            .build();
    
      }
    
      private String getNewToken() {
        // 通过一个特定的接口获取新的token,此处要用到同步的retrofit请求
        IndexService service = IndexService.Builder.getServer();
        Call<BaseObjResult<UserBean>> call = service.getToke(
            UserInfo.getInstance().getPhone(),
            UserInfo.getInstance().getPwd(),
            0);
    
        //要用retrofit的同步方式
        BaseObjResult<UserBean> newToken = null;
        try {
          newToken = call.execute().body();
        } catch (IOException e) {
          e.printStackTrace();
        }
    
        return newToken.getResult().getPHPSESSID();
      }
    
      /**
       * 根据Response,判断Token是否失效
       *
       * @return
       */
      private boolean isTokenExpired(String resultStr) {
        RequestCode requestCode = new Gson().fromJson(resultStr, RequestCode.class);
        //err==3 token过期
        if (requestCode.getErr() == 3) {
          LogUtils.e("Token登录过期了");
          ToastUtils.showShortSafe("Token登录过期了");
          return true;
        }
    
        return false;
      }
    
      class RequestCode {
        private int err;
        private String msg;
    
        public int getErr() {
          return err;
        }
    
        public void setErr(int err) {
          this.err = err;
        }
    
        public String getMsg() {
          return msg;
        }
    
        public void setMsg(String msg) {
          this.msg = msg;
        }
      }
    
    }
    
    

    使用方式

    okBuilder.addInterceptor(new TokenInterceptor()); //请求过期更换token

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

    上一篇:疯狂Android讲义(Kotlin版)  下一篇:机器学习实战:基于Scikit-Learn和TensorFlow

    展开 +

    收起 -

    Android相关电子书
    学习笔记
    网友NO.155590

    有方法让Python运行在Android上吗

    1.下载和安装 Scripting Layer for Android (SL4A) Scripting Layer for Android (SL4A) 是一个开源项目,目标是为android系统提供脚本语言的支持,使用户可以直接在android平台上进行脚本语言的编辑、解释和执行。这些脚本语言已经可是使用很多封装好的android API来开发功能丰富的android应用程序,并且使开发变得更加的简单和高效! 这个平台支持多种脚本语言,比如 Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl, shell 等,你可以选择你熟悉的语言进行开发,本系列教程使用Python为编程脚本语言 SL4A项目的地址:http://code.google.com/p/android-scripting/ 页面打开后,你可以选择用手机扫描该页面的二维码将应用直接下载并安装到手机上,或者点击二维码图片,将应用下载的电脑上在传输到手机上安装。你要是懒得去项目主页,直接扫描下图的二维码即可: 2.下载和安装 Python for android 在项目主页面的右上方,有该应用支持的所有脚本语言的下载列表 选择你使用的语言,打开相应的语言环境的下载页面,与下载SL4A的方式类似,将该语言包应用下载并安装到你的手机上。我打开的是Python的页面 程序安装完成后,打开Python for Android应用,在应用的最上方会有一个Install的按钮,点击该按钮,就会自动下载Python相关的文件并解压和安装,这个过程结束后,你的android手……

    网友NO.695925

    Android接入微信支付的方法

    1、先在微信开放平台申请开发应用,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。 2、注册APPID (这个可以放在项目的application里) 商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码如下: final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);// 将该app注册到微信msgApi.registerApp("wxd930ea5d5a258f4f"); 3、调用统一下单api生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。 例: 下面代码中的订单号是需要后台生成的 String url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; WXPrePost post = new WXPrePost(); post.appid = "你的appId"; post.mch_id = "你的商户号"; post.nonce_str = StringUtils.genNonceStr();//随机字符串 **1 post.body = "商品名称"; post.detail = "商品的描述"; post.out_trade_no = out_trade_no; //商户订单号 **2 post.total_fee = "商品价格";//单位是分 post.spbill_create_ip = getLocalIpAddress();//ip地址 **3 post.notify_url = "";//这里是后台接受支付结果通知的url地址 post.trade_type = "APP"; post.sign = genPackageSign(post);//签名 **4 ListNameValuePair firstSignParams = getFirstSignParams(post); String xml = toXml(firstSignParams); String entity = null; try { entity = new String(xml.getBytes(), "ISO8859-1"); byte[] buf = Util.httpPo……

    网友NO.112304

    Android bdflow数据库神器的使用

    今日观看别人源码的时候偶然间发现了一个很好用的数据库神器,在这里分享一下。 什么是dbflow? dbflow是Android SQLite ORM的一个使用注解操控的工具库。简单说就是对sqlite数据库进行操作的一个java库。 ORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。 为什么使用dbflow? 1、 速度 基于AnnotationProcessing(注解处理器),在编译时生成代码,运行时性能优良,通过复用对象以及缓存机制,得到不错的速度体验。 2、 扩展性 数据表单映射到数据对象,通过该对象继承Model类,一般的话继承BaseModel类就可以,对类内成员添加注解生成所需要的表单。 3、 查询语句 如果你使用过greenDao等其他的库的话,查询语句都非常接近SQL语句。 4、 基于sqlite 不限制平台,有sqlite的地方就可以使用dbflow。 5、 开源 源码是个好东西,有能力的人可以看看。https://github.com/Raizlabs/DBFlow 怎么使用dbflow 配置环境 不管是想学习什么东西,环境就是个主要东西,那对于一个三方库来说第一步就是导入类库。 首先在主要的build.gradle中添加maven地址: allprojects { repositories { maven { url "ht……

    网友NO.894256

    Android Home键监听的实现代码

    之前的一个项目需要监听home键的事件,发现用dispatchKeyEvent无法实现监听,后来查了些资料,才知道home键不能用常规的按键事件监听,需要使用广播的方法。下面是我封装的一个工具类。根据自己实际需要修改吧。 注册广播: HomeListener.getInstance().start(this); 移除广播 HomeListener.getInstance().stop(this); 设置监听回调 HomeListener.getInstance().setHomeKeylistener(HomePressListener listener); 添加监听回调 HomeListener.getInstance().addHomeKeyListener(HomePressListener listener) 移除监听回调 HomeListener.getInstance().removeHomeKeyListener(HomePressListener listener); 移除所有监听回调 HomeListener.getInstance().removeAllHomeKeyListener(); 销毁 HomeListener.getInstance().destroy(); 工具类代码: import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicBoolean;public class HomeListener { public static HomeKeyListener getInstance() { HomeKeyListener listener = HomeKeyListener.sListener; listener.init(); return listener; } static class HomeKeyListener { private static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";//home键旁边的最近程序列表键 private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";//按下home键 private static final String SYSTEM_DIALOG_……

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明