Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

Netkiller Android 手札

https://www.netkiller.cn/android/index.html

Mr. Neo Chan, 陈景峯(BG7NYT)



中国广东省深圳市望海路半岛城邦三期
518067
+86 13113668890


$Id: book.xml 606 2013-05-29 09:52:58Z netkiller $

电子书最近一次更新于 2025-04-04 09:40:40

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

http://www.netkiller.cn
http://netkiller.github.io
http://netkiller.sourceforge.net
微信公众号: netkiller
微信:13113668890 请注明“读者”
QQ:13721218 请注明“读者”
QQ群:128659835 请注明“读者”
知乎专栏

2018-10


致读者

Netkiller 系列手札 已经被 Github 收录,并备份保存在北极地下250米深的代码库中,备份会保留1000年。

Preserving open source software for future generations

The world is powered by open source software. It is a hidden cornerstone of modern civilization, and the shared heritage of all humanity.

The GitHub Arctic Code Vault is a data repository preserved in the Arctic World Archive (AWA), a very-long-term archival facility 250 meters deep in the permafrost of an Arctic mountain.

We are collaborating with the Bodleian Library in Oxford, the Bibliotheca Alexandrina in Egypt, and Stanford Libraries in California to store copies of 17,000 of GitHub’s most popular and most-depended-upon projects—open source’s “greatest hits”—in their archives, in museum-quality cases, to preserve them for future generations.

https://archiveprogram.github.com/arctic-vault/

目录

1. 自述
1.1. 写给读者
1.2. 作者简介
1.3. 如何获得文档
1.4. 打赏(Donations)
1.5. 联系方式
1. Android Studio
1.1. 卸载 Android Studio
1.2. 代码格式化
1.3. 设置兼容最低SDK版本
1.4. SDK Tools
1.4.1. 接受 License
1.4.2. 查看 SDK 列表
1.4.3. 按照 Android SDK
1.5. 命令行操作
1.6. adb 命令
1.6.1. 获得 root 权限
1.6.2. 设备管理
1.6.3. Shell
1.6.4. 设备 ID
1.6.5. 查看安卓版本
1.6.6. Logcat
1.6.7. 上传文件
1.6.8. 下载文件
1.6.9. 安卓 .apk bk
1.6.10. 屏幕尺寸
1.6.11. dump 系统信息
1.6.12. 解锁
1.6.13. 蓝牙管理
2. AndroidManifest.xml
2.1. SDK 版本配置
2.2. 开启网络
2.3. 文件存储权限
2.4. 相机权限
2.5. GPS 定位权限
2.6. 全屏-无标题
2.7. 设置为默认开机启动
2.8. 开机启动
2.9. 默认横屏
2.10. 禁止屏幕旋转变化
3. 设备
3.1. 环境变量
3.1.1. 扩展存储
3.1.2. 下载缓存目录
3.1.3. 数据目录
3.2. 配置文件
3.2.1. *.properties 文件
3.2.2. 再 AndroidManifest.xml 使用 meta-data element 定义
3.2.3. 再 build.gradle 文件中配置 productFlavors
3.2.4. 从 assets 目录读取配置文件
3.3. 设备信息
3.4. Physical density
3.5. 声卡
3.5.1. 播放
3.5.2. 录音
3.5.3. 查看声卡信息
3.5.4. /proc/asound 设备信息
3.5.5. 查看声卡当前占用设备
3.5.6. tinymix 设置声卡参数
3.5.7. 麦克风阵列调试
4. Activity
4.1. 界面佈局
4.1.1. setContentView
4.1.2. 隐藏虚拟键
4.1.3. 保持屏幕常开
4.1.4. 标题栏添加返回按钮
4.2. 切换 Activity
4.2.1. startActivity()
4.2.2. App 间跳转
4.2.3. intentActivityResultLauncher 跳转
4.2.4. startActivityForResult 替代方案
4.3. 生命周期
4.3.1. 定时关闭
4.3.2. 恢复触发
4.3.3. 返回触发
4.3.4. Activity 关闭
4.3.5. 重启自己
4.4. Activity 间数据传递
4.4.1. Intent 方式
4.4.2. Bundle 方式
4.4.3. Flag 属性
4.4.4. 返回值
4.5. DataBinding
4.5.1. 启用 DataBinding
4.5.2. MainActivity 中使用 ActivityMainBinding
4.5.3. ViewDataBinding 例子
4.6. 键盘事件
4.6.1. onKeyDown 键盘按下事件
4.6.2. dispatchKeyEvent
4.6.3. 屏蔽 KeyEvent.KEYCODE_BACK
4.6.4. 判断按下次数
4.7. 鼠标事件
4.8. 分享
4.8.1. 分享文本内容
4.8.2. 分享图片
4.8.3.
4.9. 剪切板
4.10. 软键盘控制
4.11. Res 资源
4.11.1. 通过名称查找 layout ID
4.11.2. 查找 drawable 资源 ID
4.11.3. 获取 color 颜色 ID
4.11.4. 获取 array.xml 文件下某个字段的 ID
4.11.5. 获取 style.xml 文件下的某个样式的 id
4.11.6. 主题 themes.xml
5. Fragment
5.1. 启动 Fragment
5.2. 关闭 Fragment
5.3. 在 Fragment 中使用 findViewById
5.4. 在 Fragment 中使用 Intent 跳转
5.5. Fragment 中调用 getPackageManager()
5.6. 在 Fragment 中使用 runOnUiThread
5.7. Fragment 中调用 findViewById
5.8. 替换 FrameLayout
5.9. Fragment 接收 BroadcastReceiver 广播
5.10. Fragment 加载报错 java.lang.IllegalArgumentException: No view found for id ...
5.11. 使用 TabLayout 切换 Fragment
6. Resources
6.1. strings.xml
6.1.1. 字符串
6.1.2. 定义数组
6.1.3. 获取 Resource
6.1.4. Fragment 获取 Resource
6.2. dimens.xml
7. Palette 视觉设计
7.1. 禁止屏幕休眠
7.2. 颜色设置
7.2.1. 颜色设置
7.3. 样式布局
7.3.1. ConstraintLayout
7.3.2. LinearLayout
7.3.3. FrameLayout
7.3.4. 声音波形图
7.4. UI 界面
7.4.1. Toast
7.4.2. Dialog
7.4.3. DatePicker
7.5. Text
7.5.1. Text 相关属性
7.5.2. TextView
7.5.3. EditText
7.5.4. 光标移动到行尾
7.5.5. 禁止选择文本
7.5.6. 设置 app:backgroundTint
7.5.7. 禁止滚动条
7.6. Button
7.6.1. 启用禁用
7.6.2. 实现 OnClickListener 接口
7.6.3. Fragment 中使用 Button
7.6.4. 圆形按钮
7.6.5. ImageButton
7.7. Switch
7.8. Widgets
7.8.1. ImageView
7.8.2. TextClock
7.8.3. 进度条
7.8.4. NestedScrollView +
7.9. Containers
7.9.1. CardView
7.9.2. RecyclerView
7.9.3. NavigationView
7.9.4. 底部导航
7.9.5. TabLayout
7.9.6. ViewPager2
7.9.7. Navigation
7.10. 屏幕
7.10.1.
7.10.2. 媒体路由
7.10.3. 分辨率
7.10.4. 尺寸
7.10.5. 全屏显示
7.10.6. 音频处理
7.10.7. 屏幕触摸事件 onTouch(View view, MotionEvent motionEvent)
7.10.8. 手势事件
7.10.9. SimpleOnGestureListener
7.10.10. SimpleOnScaleGestureListener
7.11. 带有小三角指示的消息框
7.11.1. 左侧三角
7.11.2. 右侧三角
7.11.3. 正三角
7.11.4. 倒三角
7.11.5. 文本边框
7.11.6. 布局
8. Schedule 计划任务
8.1. 延迟执行
8.2. Time 和 TimerTask 定时刷新
8.3. 使用 Runnable 和 Handler 实现定时执行
8.4. 循环执行
8.5. TimerTask 实现循环播放
8.6. TimerTask 更新 UI
9. Internationalization i18n with Android (国际化)
9.1. 创建国际化文件
9.2. strings.xml 文件
9.3. 翻译语言
9.4. 引用国际化文件
9.5. 切换语言
10. 存储
10.1. 获得存储目录
10.1.1. 公共存储目录
10.1.2. 内部存储
10.1.3. 扩展存储
10.1.4. 文件夹类型
10.2. FileProvider 配置
10.3. SharedPreferences
10.3.1. 操作模式
10.3.2. 保存数据
10.3.3. 读取数据
10.3.4. 通过 key 查询数据是否存在
10.3.5. 删除数据
10.3.6. 清空数据
10.3.7. 对象存储
10.3.8. SharedPreferences 读取物理存储文件
10.4. SD Card
10.4.1. SD Card 状态
10.4.2. Android 11 申请 sdcard 权限
10.5. 下载管理
10.5.1. 从 URL 下来文件
10.5.2. 安装 APK
10.5.3. 下载后接收广播通知
10.6. android.os.FileUriExposedException
11. 网络
11.1. Wifi 配置
11.2. OkHttp - An HTTP & HTTP/2 client for Android and Java applications
11.2.1. Gradle
11.2.2. AndroidManifest.xml 开启网络访问权限
11.2.3. okhttp 默认是 HTTPS 开启 HTTP
11.2.4. 连接池
11.2.5. GET
11.2.6. POST
11.2.7. HTTP PUT 请求
11.2.8. http header 相关设置
11.2.9. HTTP Base Auth
11.2.10. HttpUrl.Builder 组装 URL 地址参数
11.2.11. Android Activity Example
11.2.12. Android Oauth2 + Jwt example
11.2.13. HTTP/2
11.2.14. 异步更新 UI
11.2.15. SSE 客户端
11.2.16. WebSocket Client
11.2.17. EventListener
12. 相机与相册
12.1. 调用相机
12.1.1. manifest 文件
12.1.2. layout
12.1.3. Activity
12.2. 相机开发
12.2.1. 页面布局
12.2.2. 相机逻辑功能
12.3. LED flash 做手电筒
13. 麦克风与录音
13.1. 开启麦克风和SD卡权限
13.2. layout
13.3. Activity
14. 多媒体开发
14.1. MediaPlayer
14.1.1. 播放Raw下的元数据
14.1.2. 播放assets文件夹中的音乐
14.1.3. 播放互联网音乐
14.1.4. 使用单例模式
14.1.5. 设置速度,快进播放
14.2. VideoView 开发
14.2.1. 播放网络视频
14.2.2. MediaController 添加翻页事件
14.2.3. 静音播放视频
14.2.4. 更新进度条
14.2.5. 完整的例子
14.2.6. 循环播放
14.2.7. 静音播放
14.3. SoundPool
14.4. 音量控制
14.5. SurfaceView
14.6. Vitamio
15. 定位
15.1. GPS + 网络 定位
15.1.1. manifest 权限配置
15.1.2. layout
15.1.3. Activity
15.2. 只从 GPS 获取定位
16. 电话
16.1. SIM 卡状态
16.2. 通信录与拨打电话
16.3. 发送短信
17. 消息广播
17.1. 动态注册
17.2. 静态注册
17.2.1. 电源管理
17.2.2. 接收不到消息
17.3. 自定义用户消息广播
17.4. 本地广播
17.5. 动态监听广播
17.6. 广播重复接收
17.7. 指定静态广播接收者
17.8. 异步执行广播
17.9. 静态广播接收不到信息
18. Service 服务
18.1. Service的基本用法
18.1.1. manifest 文件
18.1.2. 创建 Service
18.1.3. Layout 代码
18.1.4. Activity 代码
18.2. Service 中启动线程
18.3. Service 和 Activity 通信
18.3.1. Layout
18.3.2. Service
18.3.3. Activity
18.4. Service 和 Toast
18.5. Service 中启动 Activity
18.6. Service 中更新 UI
18.7. 前台启动 Service
18.8. 在 Fragment 中启动 Service
19. Notification 通知中心
19.1. 文本通知
19.2. 添加点击操作
19.3. Notification 给 Activity 传值
19.4. 通过 isNotification 判断是否需要执行 onStop() 和 onDestroy()
20. NFC (Near field communication)
20.1. AndroidManifest.xml 文件配置
20.2. Loyout 文件
20.3. Activity 文件
21. 图形开发
21.1. Paint
21.1.1. Paint.setTextSize() SP to PX
21.2. AnimationDrawable
21.3. 矩形
21.4. 路径
22. Android 多线程
22.1. Sleep
22.2. GPIO
22.3. 消息队列
22.3.1. 非阻塞队列 ConcurrentLinkedQueue
23. EventBus
23.1. 添加 EventBus 依赖到项目Gradle文件
23.2. 快速开始一个演示例子
23.2.1. 创建 MessageEvent 类
23.2.2. Layout
23.2.3. Activity
23.3. Sticky Events
23.3.1. MainActivity
23.3.2. StickyActivity
23.3.3. MessageEvent
23.3.4. 删除粘性事件
23.4. 线程模型
23.5. 配置 EventBus
23.6. 事件优先级
23.7. 捕获异常事件
24. Android MQTT
24.1. build.gradle 添加依赖包
24.2. AndroidManifest.xml
24.3. Android Mqtt v5 例子
25. 安卓开发版
25.1. rk3568
25.1.1. 声卡
26. 杂项
26.1. Caused by: java.net.UnknownServiceException: CLEARTEXT communication to 47.100.253.187 not permitted by network security policy
26.2. 设计模式
26.2.1. 单例模式
26.3. Android OS 包
26.3.1. 进程ID
26.3.2. handler
26.4. fastjson android
26.4.1. 对象转字符串
26.4.2. JsonObject 转对象
26.4.3. 字符串 与 json 互转
26.4.4. json 转 数组
26.4.5. JSON数组转List
26.4.6. Map 与 Json 互转
26.5. Butter Knife
26.6. Android Things
26.6.1. GPIO
27. FAQ
27.1. java.net.UnknownServiceException: CLEARTEXT communication to 192.168.0.185 not permitted by network security policy
27.2. Caused by: android.os.NetworkOnMainThreadException
27.3. java.lang.IllegalStateException: Player is accessed on the wrong thread.
27.4. Manifest merger failed with multiple errors, see logs
27.5. android.os.NetworkOnMainThreadException
27.6. package does not have vibrate permission
27.7. Can't create handler inside thread Thread[...,5,main] that has not called Looper.prepare()
27.8. java.lang.SecurityException: Permission denied (missing INTERNET permission?)
27.9. java.io.IOException: Cleartext HTTP traffic to **** not permitted
28. 讯飞云
28.1. AIUI
28.1.1. AIUIPlayer
28.1.2. 酷我音乐
28.1.3. 控制技能
28.1.4. 唤醒词
28.1.5. 汉字转拼音
28.2. 讯飞 TTS
28.2.1. 设置日志输出级别
28.2.2. 流式语音合成
28.3. 语音唤醒
28.3.1. 范例

范例清单

8.1.