IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android蓝牙同步通讯录 -> 正文阅读

[移动开发]android蓝牙同步通讯录

代码来源 Pie 9.0.0_r3

通讯录存放在哪?

系统有个apk叫

ContactsProvider
里面有如下数据库,通讯录就存在数据库里
/data/data/com.android.providers.contacts/databases/calllog.db
/data/data/com.android.providers.contacts/databases/contacts2.db
/data/data/com.android.providers.contacts/databases/profile.db

谁去管理同步过程?

蓝牙电话同步通讯录时会去操作ContactsProvider
PhonebookPullRequest.java

Handler接收消息进行同步
PbapClientConnectionHandler.java

241            case MSG_DOWNLOAD:
242                try {
243                    mAccountCreated = addAccount(mAccount);
244                    if (!mAccountCreated) {
245                        Log.e(TAG, "Account creation failed.");
246                        return;
247                    }
248                    // Start at contact 1 to exclued Owner Card PBAP 1.1 sec 3.1.5.2
249                    BluetoothPbapRequestPullPhoneBook request =
250                            new BluetoothPbapRequestPullPhoneBook(PB_PATH, mAccount,
251                                    PBAP_REQUESTED_FIELDS, VCARD_TYPE_30, 0, 1);
252                    request.execute(mObexSession);
253                    PhonebookPullRequest processor =
254                            new PhonebookPullRequest(mPbapClientStateMachine.getContext(),
255                                    mAccount);
256                    processor.setResults(request.getList());
257                    processor.onPullComplete();
258                    HashMap<String, Integer> callCounter = new HashMap<>();
259                    downloadCallLog(MCH_PATH, callCounter);
260                    downloadCallLog(ICH_PATH, callCounter);
261                    downloadCallLog(OCH_PATH, callCounter);
262                } catch (IOException e) {
263                    Log.w(TAG, "DOWNLOAD_CONTACTS Failure" + e.toString());
264                }

哪里发送的消息呢?
1.连接上PBAP后已经解除锁屏
PbapClientStateMachine.java

295    class Connected extends State {
296        @Override
297        public void enter() {
298            Log.d(TAG, "Enter Connected: " + getCurrentMessage().what);
299            onConnectionStateChanged(mCurrentDevice, mMostRecentState,
300                    BluetoothProfile.STATE_CONNECTED);
301            mMostRecentState = BluetoothProfile.STATE_CONNECTED;
302            if (mUserManager.isUserUnlocked()) {
303                mConnectionHandler.obtainMessage(PbapClientConnectionHandler.MSG_DOWNLOAD)
304                        .sendToTarget();
305            }
306        }

2.收到解除锁屏广播后会调用 resumeDownload

356    public void resumeDownload() {
357        sendMessage(MSG_RESUME_DOWNLOAD);
358    }
==========================
321                case MSG_RESUME_DOWNLOAD:
322                    mConnectionHandler.obtainMessage(PbapClientConnectionHandler.MSG_DOWNLOAD)
323                            .sendToTarget();
324                    break;

那么如何获取下载状态?如何获取下载进度?
Pie 9.0.0_r3 里并没有此逻辑
其他版本源码没有看

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:42:49  更:2021-08-12 16:43:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:58:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码