Home
|
简体中文
|
繁体中文
|
杂文
|
Github
|
知乎专栏
|
Facebook
|
Linkedin
|
Youtube
|
打赏(Donations)
|
About
部分 VIII. Android
上一页
下一页
知乎专栏
部分 VIII. Android
目录
60. Android Studio
60.1. 卸载 Android Studio
60.2. 代码格式化
60.3. 设置兼容最低SDK版本
60.4. SDK Tools
60.4.1. 接受 License
60.4.2. 查看 SDK 列表
60.4.3. 按照 Android SDK
60.5. 命令行操作
60.6. adb 命令
60.6.1. 获得 root 权限
60.6.2. 设备管理
60.6.3. Shell
60.6.4. 设备 ID
60.6.5. 查看安卓版本
60.6.6. Logcat
60.6.7. 上传文件
60.6.8. 下载文件
60.6.9. 安卓 .apk bk
60.6.10. 屏幕尺寸
60.6.11. dump 系统信息
60.6.12. 解锁
60.6.13. 蓝牙管理
60.6.14. 声卡
60.6.15. 摄像头
61. AndroidManifest.xml
61.1. SDK 版本配置
61.2. 开启网络
61.3. 文件存储权限
61.4. 相机权限
61.5. GPS 定位权限
61.6. 全屏-无标题
61.7. 设置为默认开机启动
61.8. 开机启动
61.9. 默认横屏
61.10. 禁止屏幕旋转变化
62. 设备
62.1. 环境变量
62.1.1. 扩展存储
62.1.2. 下载缓存目录
62.1.3. 数据目录
62.2. 配置文件
62.2.1. *.properties 文件
62.2.2. 再 AndroidManifest.xml 使用 meta-data element 定义
62.2.3. 再 build.gradle 文件中配置 productFlavors
62.2.4. 从 assets 目录读取配置文件
62.3. 设备信息
62.4. Physical density
62.5. 声卡
62.5.1. 播放
62.5.2. 录音
62.5.3. 查看声卡信息
62.5.4. /proc/asound 设备信息
62.5.5. 查看声卡当前占用设备
62.5.6. tinymix 设置声卡参数
62.5.7. 麦克风阵列调试
62.6. 判断是平板,还是手机
62.7. 蓝牙设备管理
62.7.1. 进入蓝牙设置界面
62.7.2. 通过发送广播处理蓝牙
62.7.3. 蓝牙禁用/启用
62.7.4. 获取蓝牙设备
62.7.5. 查询已绑定设备
62.8. USB 设备
62.8.1. USB 音频设备
63. Activity
63.1. 界面佈局
63.1.1. setContentView
63.1.2. 隐藏虚拟键
63.1.3. 保持屏幕常开
63.1.4. 标题栏添加返回按钮
63.2. 切换 Activity
63.2.1. startActivity()
63.2.2. App 间跳转
63.2.3. intentActivityResultLauncher 跳转
63.2.4. startActivityForResult 替代方案
63.3. 生命周期
63.3.1. 定时关闭
63.3.2. 恢复触发
63.3.3. 返回触发
63.3.4. Activity 关闭
63.3.5. 重启自己
63.4. Activity 间数据传递
63.4.1. Intent 方式
63.4.2. Bundle 方式
63.4.3. Flag 属性
63.4.4. 返回值
63.5. DataBinding
63.5.1. 启用 DataBinding
63.5.2. MainActivity 中使用 ActivityMainBinding
63.5.3. ViewDataBinding 例子
63.6. 键盘事件
63.6.1. onKeyDown 键盘按下事件
63.6.2. dispatchKeyEvent
63.6.3. 屏蔽 KeyEvent.KEYCODE_BACK
63.6.4. 判断按下次数
63.7. 鼠标事件
63.8. 分享
63.8.1. 分享文本内容
63.8.2. 分享图片
63.8.3.
63.9. 剪切板
63.10. 软键盘控制
63.11. 自定义事件
63.11.1. 按钮点击事件
63.11.2. OnCheckedChangeListener
63.11.3. CustomOnItemSelectedListener
63.11.4. CustomOnScrollListener
63.11.5. CustomOnTabSelectedListener
63.12. Res 资源
63.12.1. 通过名称查找 layout ID
63.12.2. 查找 drawable 资源 ID
63.12.3. 获取 color 颜色 ID
63.12.4. 获取 array.xml 文件下某个字段的 ID
63.12.5. 获取 style.xml 文件下的某个样式的 id
63.12.6. 主题 themes.xml
64. Fragment
64.1. 启动 Fragment
64.2. 关闭 Fragment
64.3. 在 Fragment 中使用 findViewById
64.4. 在 Fragment 跳转 Activity
64.5. 在 Fragment 跳转 Activity 同时携带 Intent 参数
64.6. Fragment 中调用 getPackageManager()
64.7. 在 Fragment 中使用 runOnUiThread
64.8. Fragment 中调用 findViewById
64.9. 替换 FrameLayout
64.10. Fragment 接收 BroadcastReceiver 广播
64.11. Fragment 加载报错 java.lang.IllegalArgumentException: No view found for id ...
64.12. 使用 TabLayout 切换 Fragment
65. Resources
65.1. strings.xml
65.1.1. 字符串
65.1.2. 定义数组
65.1.3. 获取 Resource
65.1.4. Fragment 获取 Resource
65.2. dimens.xml
66. Palette 视觉设计
66.1. 禁止屏幕休眠
66.2. 颜色设置
66.2.1. 颜色设置
66.3. 样式布局
66.3.1. ConstraintLayout
66.3.2. LinearLayout
66.3.3. FrameLayout
66.3.4. 声音波形图
66.4. UI 界面
66.4.1. Toast
66.4.2. Dialog
66.4.3. DatePicker
66.4.4. Snackbar - Toast 的替代者
66.5. Text
66.5.1. Text 相关属性
66.5.2. TextView
66.5.3. EditText
66.5.4. 光标移动到行尾
66.5.5. 禁止选择文本
66.5.6. 设置 app:backgroundTint
66.5.7. 禁止滚动条
66.6. Button
66.6.1. 启用禁用
66.6.2. 实现 OnClickListener 接口
66.6.3. Fragment 中使用 Button
66.6.4. 圆形按钮
66.6.5. ImageButton
66.6.6. 添加悬浮操作按钮
66.7. Switch
66.8. Widgets
66.8.1. ImageView
66.8.2. TextClock
66.8.3. 进度条
66.8.4. NestedScrollView +
66.9. Containers
66.9.1. CardView
66.9.2. RecyclerView
66.9.3. NavigationView
66.9.4. 底部导航
66.9.5. TabLayout
66.9.6. ViewPager2
66.9.7. Navigation
66.10. 屏幕
66.10.1.
66.10.2. 媒体路由
66.10.3. 分辨率
66.10.4. 尺寸
66.10.5. 全屏显示
66.10.6. 音频处理
66.10.7. 屏幕触摸事件 onTouch(View view, MotionEvent motionEvent)
66.10.8. 手势事件
66.10.9. SimpleOnGestureListener
66.10.10. SimpleOnScaleGestureListener
66.11. 带有小三角指示的消息框
66.11.1. 左侧三角
66.11.2. 右侧三角
66.11.3. 正三角
66.11.4. 倒三角
66.11.5. 文本边框
66.11.6. 布局
67. Schedule 计划任务
67.1. 使用 Runnable 和 Handler 实现定时执行
67.1.1. 循环执行
67.1.2. 延迟执行
67.2. TimerTask 实现循环播放
67.2.1. Time 和 TimerTask 定时刷新
67.2.2. TimerTask 更新 UI
67.3. ScheduledExecutorService
68. Internationalization i18n with Android (国际化)
68.1. 创建国际化文件
68.2. strings.xml 文件
68.3. 翻译语言
68.4. 引用国际化文件
68.5. 切换语言
69. 存储
69.1. 获得存储目录
69.1.1. 用户存储目录
69.1.2. Assets 目录
69.1.3. 公共存储目录
69.1.4. 内部存储
69.1.5. 扩展存储
69.1.6. 文件夹类型
69.2. FileProvider 配置
69.3. SD Card
69.3.1. SD Card 状态
69.3.2. Android 11 申请 sdcard 权限
69.4. 下载管理
69.4.1. 从 URL 下来文件
69.4.2. 安装 APK
69.4.3. 下载后接收广播通知
69.5. android.os.FileUriExposedException
69.6. 下载工具类
70. 网络
70.1. Wifi 配置
70.2. WI-FI 与 蜂窝网络 信号强度检测
70.3. OkHttp - An HTTP & HTTP/2 client for Android and Java applications
70.3.1. Gradle
70.3.2. AndroidManifest.xml 开启网络访问权限
70.3.3. okhttp 默认是 HTTPS 开启 HTTP
70.3.4. 连接池
70.3.5. HttpUrl
70.3.6. GET
70.3.7. POST
70.3.8. HTTP PUT 请求
70.3.9. http header 相关设置
70.3.10. HTTP Base Auth
70.3.11. HttpUrl.Builder 组装 URL 地址参数
70.3.12. Android Activity Example
70.3.13. Android Oauth2 + Jwt example
70.3.14. HTTP/2
70.3.15. 异步更新 UI
70.3.16. SSE 客户端
70.3.17. WebSocket Client
70.3.18. EventListener
70.3.19. 文件下来
70.4. Retrofit - https://github.com/square/retrofit
70.4.1. Gradle 依赖
70.4.2. Authorization 头
71. 相机与相册
71.1. 调用相机
71.1.1. manifest 文件
71.1.2. layout
71.1.3. Activity
71.2. 相机开发
71.2.1. 页面布局
71.2.2. 相机逻辑功能
71.3. LED flash 做手电筒
72. 多媒体开发
72.1. AudioDeviceInfo
72.2. MediaPlayer
72.2.1. 播放Raw下的元数据
72.2.2. 播放assets文件夹中的音乐
72.2.3. 播放互联网音乐
72.2.4. 使用单例模式
72.2.5. 设置速度,快进播放
72.2.6. OPUS
72.3. AudioPlayer
72.4. AudioTrack
72.5. VideoView 开发
72.5.1. 播放网络视频
72.5.2. MediaController 添加翻页事件
72.5.3. 静音播放视频
72.5.4. 更新进度条
72.5.5. 完整的例子
72.5.6. 循环播放
72.5.7. 静音播放
72.6. SoundPool
72.7. 音量控制
72.8. 麦克风
72.8.1. AudioRecord
72.8.2. 远端录音
72.8.3. 选择麦克风
72.8.4. 设置蓝牙麦克风为默认麦克风
72.8.5. 录音例子
72.8.6. Microphone 录音,蓝牙,增益
72.9. 麦克风与录音例子
72.9.1. 开启麦克风和SD卡权限
72.9.2. layout
72.9.3. Activity
72.10. MediaRecorder 录音例子
72.11. MediaCodec
72.12. ExoPlayer
72.12.1. Opus
72.13. Opus
72.13.1. Kopus - A Kotlin Multiplatform library providing OPUS audio codec functionality for Android and iOS platforms.
73. 定位
73.1. GPS + 网络 定位
73.1.1. manifest 权限配置
73.1.2. layout
73.1.3. Activity
73.2. 只从 GPS 获取定位
74. 电话
74.1. SIM 卡状态
74.2. 通信录与拨打电话
74.3. 发送短信
75. 消息广播
75.1. 动态注册
75.2. 静态注册
75.2.1. 电源管理
75.2.2. 接收不到消息
75.2.3. StaticBroadcastReceiver 完整的例子
75.3. 自定义用户消息广播
75.4. 本地广播
75.5. 动态监听广播
75.6. 广播重复接收
75.7. 指定静态广播接收者
75.8. 异步执行广播
75.9. 静态广播接收不到信息
75.10. 接受蓝牙广播
75.11. 接收 USB 设备广播
75.11.1.
75.12. Wifi 广播
75.13. LiveDataBus - 官方 AndroidX jetpack
76. Service 服务
76.1. Service的基本用法
76.1.1. manifest 文件
76.1.2. 创建 Service
76.1.3. Layout 代码
76.1.4. Activity 代码
76.2. bindService
76.3. Service 中启动线程
76.4. Service 和 Activity 通信
76.4.1. Layout
76.4.2. Service
76.4.3. Activity
76.5. Service 和 Toast
76.6. Service 中启动 Activity
76.7. Service 中更新 UI
76.8. 前台启动 Service
76.9. 在 Fragment 中启动 Service
77. Android 多线程
77.1. Thread
77.1.1. 线程名称
77.1.2. 线程名称
77.1.3. Sleep
77.2. Handler
77.3. HandlerThread
77.3.1. Handler post
77.3.2. 发送消息
77.3.3. 完整例子
77.3.4. 获取线程名称
77.3.5. HandlerThread 队列
77.3.6. Token 应用
77.4. 消息队列
77.4.1. 非阻塞队列 ConcurrentLinkedQueue
78. Notification 通知中心
78.1. 文本通知
78.2. 添加点击操作
78.3. Notification 给 Activity 传值
78.4. 通过 isNotification 判断是否需要执行 onStop() 和 onDestroy()
79. NFC (Near field communication)
79.1. AndroidManifest.xml 文件配置
79.2. Loyout 文件
79.3. Activity 文件
80. 图形开发
80.1. Paint
80.1.1. Paint.setTextSize() SP to PX
80.2. AnimationDrawable
80.3. 矩形
80.4. 路径
81. EventBus
81.1. 添加 EventBus 依赖到项目Gradle文件
81.2. 快速开始一个演示例子
81.2.1. 创建 MessageEvent 类
81.2.2. Layout
81.2.3. Activity
81.3. Sticky Events
81.3.1. MainActivity
81.3.2. StickyActivity
81.3.3. MessageEvent
81.3.4. 删除粘性事件
81.4. 线程模型
81.5. 配置 EventBus
81.6. 事件优先级
81.7. 捕获异常事件
82. Android MQTT
82.1. build.gradle 添加依赖包
82.2. AndroidManifest.xml
82.3. Android Mqtt v5 例子
83. 数据库
83.1. SharedPreferences
83.1.1. 操作模式
83.1.2. 保存数据
83.1.3. 读取数据
83.1.4. 通过 key 查询数据是否存在
83.1.5. 删除数据
83.1.6. 清空数据
83.1.7. 对象存储
83.1.8. SharedPreferences 读取物理存储文件
83.2. Room
83.2.1. 快速开始并掌握 Room 数据库
83.2.2. 组合唯一索引
83.3. Preferences DataStore
83.4. Proto DataStore
84. 杂项
84.1. Caused by: java.net.UnknownServiceException: CLEARTEXT communication to 47.100.253.187 not permitted by network security policy
84.2. 设计模式
84.2.1. 单例模式
84.3. Android OS 包
84.3.1. 进程ID
84.3.2. handler
84.4. fastjson android
84.4.1. 对象转字符串
84.4.2. JsonObject 转对象
84.4.3. 字符串 与 json 互转
84.4.4. json 转 数组
84.4.5. JSON数组转List
84.4.6. Map 与 Json 互转
84.5. Butter Knife
84.6. Android Things
84.6.1. GPIO
85. FAQ
85.1. java.net.UnknownServiceException: CLEARTEXT communication to 192.168.0.185 not permitted by network security policy
85.2. Caused by: android.os.NetworkOnMainThreadException
85.3. java.lang.IllegalStateException: Player is accessed on the wrong thread.
85.4. Manifest merger failed with multiple errors, see logs
85.5. android.os.NetworkOnMainThreadException
85.6. package does not have vibrate permission
85.7. Can't create handler inside thread Thread[...,5,main] that has not called Looper.prepare()
85.8. java.lang.SecurityException: Permission denied (missing INTERNET permission?)
85.9. java.io.IOException: Cleartext HTTP traffic to **** not permitted
85.10. 调试技巧,找不到哪里调用
86. 从 Java 到 Kotlin
86.1. 数据类型与数据结构
86.1.1. 字符串
86.1.2. 日期时间
86.1.3. 数组
86.1.4. List 列表
86.1.5. Map 图
86.1.6. let
86.2. Class
86.2.1. 枚举
86.3. 流程控制
86.3.1.
86.3.2. 循环
86.4. Callback 回调
86.4.1. Consumer
86.4.2. callback
86.4.3. 定义接口方式
86.5. 界面操作
86.5.1. findViewById
86.5.2. runOnUiThread
86.5.3. Fragment
86.5.4. ImageView
86.6. Thread
86.6.1. Handler
86.6.2.
86.7. 定时与延迟执行
86.7.1. Timer
86.7.2.
86.8. MutableLiveData
86.8.1. MutableLiveData 使用 Pair 传 key, value 两个值
86.8.2. MutableLiveData 传自定义对象
86.9. Flow
86.9.1. MutableSharedFlow
86.10. 协程
86.10.1. GlobalScope
86.10.2. MainScope
86.10.3. lifecycleScope
86.10.4.
86.10.5. viewModelScope
86.10.6. 协程上下文与继承关系
87. 云服务
87.1. 讯飞云
87.1.1. AIUI
87.1.2. 讯飞 TTS
87.1.3. 语音唤醒
87.2. 阿里云
87.2.1. nuisdk-release.aar 版本问题
87.2.2. 获取 Token
87.2.3. 语音唤醒
87.2.4. CosyVoice 语音合成