随笔分类 - Android
1
摘要:1 前言 使用ContentProvider实现跨进程通讯 中介绍了自定义 ContentProvider,为外界提供操作 SQLite 的接口。但是大多数情况下,服务端的 ContentProvider 不需要用户编写,用户只需要知道怎么调用就行,比如系统资源。因此,本文将以监控飞行模式状态和最新
阅读全文
摘要:1 前言 ContentProvider 即内容提供器,是 Android 四大组件之一,为 App 存取数据提供统一的对外接口,让不同的应用之间可以共享数据。 如图,Server 端通过 ContentProvider 对外提供操作本地数据(DataBase、File 等)的接口,Clie
阅读全文
摘要:1 前言 Handler 即处理器,常用于跨线程通讯:线程A 和线程 B 拥有同一个 handler 对象,在线程 A 中使用 handler 的 sendMessage() 方法发送消息,在线程 B 中使用 handler 的 handleMessage() 方法处理消息。 Handler
阅读全文
摘要:1 前言 MediaCodec 主要用于视频解码和编码操作,可以实现视频倍速播放、全关键帧转换、视频倒放等功能。 MediaCodec 的工作原理图如下: MediaCodec 的主要接口如下: //创建解码器(type为mime或name) public static MediaCod
阅读全文
摘要:1 前言 使用MediaExtractor、MediaMuxer去掉视频文件中的音频数据 中介绍了 MediaExtractor 类的主要方法,本文主要将使用其 advance() 和 seekTo(timeUs, mode) 方法遍历帧,以获取关键帧的时间戳。 advance() 方法能够从任
阅读全文
摘要:1 环境配置与初始化 (1)申请权限 在 AndroidManifest.xml 中的 manifest 标签(application 同级标签)下添加外部存储读写权限,如下: <uses-permission android:name="android.permission.WRITE_E
阅读全文
摘要:1 简介 本文以 mp4 文件为例,讲解去音频操作。mp4 是一种视频封装的容器,里面包含音频(audio)和视频(video)数据,对应的数据编码格式分别为 aac 和 h264。在去音频过程中,主要使用到 MediaFormat、MediaExtractor、MediaMuxer,其作用如下
阅读全文
摘要:1 前言 使用Socket实现跨设备通讯 中介绍了使用 WiFi 通道实现跨设备通讯,本文将介绍使用 Bluetooth 通道实现跨进程通讯。 本文全部代码见→使用BluetoothSocket实现跨设备通讯 1.1 蓝牙通讯核心类 在蓝牙通讯中,主要用到 BluetoothAdapter、
阅读全文
摘要:1 前言 ExoPlayer 是 google 开源的应用级媒体播放器,github源码 → https://github.com/google/ExoPlayer。相较于 MediaPlayer,ExoPlayer 具有以下优点: 支持更多的视频播放格式(包含 DASH 和 SmoothStr
阅读全文
摘要:1 Socket 简介 Socket(套接字)是应用层与 TCP/IP 协议通信的中间软件抽象层,它是一组接口,用户只需面向 Socket 编程,即可实现跨设备(网络)通讯。 Socket 是 java 里的东西,不是 Android 特有的,使用 Socket 需要导入的类如下。 java
阅读全文
摘要:1 前言 使用AIDL实现进程间通讯简单案例 和 使用AIDL实现进程间传递对象案例 中介绍了使用 AIDL 进行进程间通讯,其本质仍然是Binder,aidl 文件对应生成的接口中,将服务端调用的抽象类(Stub)和客户端调用的代理类(Proxy)糅合在一个 java 文件中,使得新手读起来云里雾
阅读全文
摘要:1 前言 使用AIDL实现进程间通讯简单案例 和 使用AIDL实现进程间传递对象案例 中介绍了使用 AIDL 进行进程间通讯,文中提到在编写完 aidl 文件(如:IMessageManager.aidl)并 Make Buidl 后,会生成一个接口(如:IMessageManager.java),
阅读全文
摘要:1 Messenger 简介 Messenger 类实现了 Parcelable 接口,用于进程间传输并处理消息,调用流程如下: Client 通过 bindService() 请求绑定 Service Service 通过 messenger_s.getBinder() 获取 IBunder
阅读全文
摘要:1 AIDL 简介 AIDL(Android Interface Definition Language)是一种接口定义语言,用于生成可在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。通过定义编辑 adil 文件,build 后生成对应的 java 类。 如下,为定义的
阅读全文
摘要:1 前言 在 Android——使用AIDL实现进程间通讯简单案例 中介绍了使用 AIDL 在进程间传递字符串,对于8种基本数据类型( byte、short、int、long、float、double、boolean、char )和 CharSequence(包含 String )、List、M
阅读全文
摘要:1 Broastcast 简介 Broadcast(广播)是 Android 中一种广泛运用的在应用程序之间传输信息的机制。使用 Broadcast 能够很方便得实现进程间通讯,一端通过 sendBroadcast(intent) 广播消息,另一端通过 registerReceiver(myRe
阅读全文
摘要:1 问题描述 在旋转屏幕时,记录旋转屏幕次数的计数器(count)一直为 0,不能实现累加效果。主要因为在旋转屏幕时,会销毁原来的变量,重新构建界面。 2 解决思路 在 Activity 销毁(onDestroy)之前,将 count 保存到 Bundle中,再在 Activity 构建(o
阅读全文
摘要:1问题描述 如图1.1,有5个哲学家围着一个大圆桌就餐。哲学家和筷子都按逆时针顺序编号,每个哲学家的编号与他左边的筷子的编号一致。 规定如下: (1)哲学家之间不相互交流; (2)哲学家只做两件事:吃饭或思考; (3)每个哲学家只能拿其邻近的左右两支筷子; (4)哲学家不能抢占别人已经拿起的筷子;
阅读全文
摘要:1 工作空间 2 代码 MainActivity.java package com.zhyan8.demo; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import a
阅读全文
摘要:1 基础编辑 Ctrl+A:全选(选中当前文档所有内容) Ctrl+C:复制选中内容到剪贴板 Ctrl+X:剪切选中内容到剪贴板 Ctrl+V:将剪贴板中的内容粘贴到光标处 Ctrl+Z:撤销 Ctrl+Shift+Z:逆撤销 Ctrl+S:保存当前文件 Ctrl+F6:重命名文件名 2 高级编辑
阅读全文
1