簡體   English   中英

使用 Android 10+ 直接訪問文件(SQlite 數據庫)

[英]Direct file access (SQlite database) with Android 10+

我有 2 個應用程序 A 和 B。A 可以將數據下載到 B 擁有的 sqlite 數據庫。直到現在我問用戶 WRITE_EXTERNAL_STORAGE 權限,A 可以直接寫入 B 的數據庫,因此使用事務以避免更改數據庫,如果用戶取消該過程。

使用 Android 10 直接文件訪問似乎不再可能,因為我們被迫使用 ****** SAF ...

為了仍然可以正常工作,我更新了我的應用程序以使用 ContentProvider。 但是,我不再能夠使用事務來提供取消功能:數據太重而無法放入內存中,我無法使用 ContentProvider 的批量插入方法(如果我沒記錯的話?)。

我被卡住了嗎? 或者是否有解決方案可以在我擁有的兩個應用程序之間授予直接文件訪問權限? 理想情況下,他的流程是這樣的:

  • 1 向 B 請求一個文件訪問權限
  • B 授予訪問權限
  • A 開始交易
  • 一個下載文件 1
  • 一個下載文件 2
  • [...]
  • 一個下載文件 n
  • A 提交事務(如果用戶要求取消則回滾)
  • A通知B下載完成
  • B 撤銷訪問

那可能嗎?

編輯:我需要訪問 File 對象,以便使用 SqliteDatabaseOpenHelper 類,因此 grantUriPermission 不會幫助我。

有沒有一種解決方案可以在我擁有的兩個應用程序之間授予直接文件訪問權限?

不。

我被卡住了嗎?

你可以這樣做:

  • 一個下載文件 1
  • 一個下載文件 2
  • [...]
  • 一個下載文件 n
  • A通過某種方式告訴B“喲,我下載了這些文件”(見下文),如果用戶沒有取消操作
  • B 更新自己的數據庫

“通過某種方式”可能是:

  • insert()update()與您的ContentProvider
  • startService()傳遞的命令
  • bindService()和對 B 的服務公開的 AIDL 定義的 API 的調用
  • 廣播Intent有明確的Intent
  • 在 B 中開始一項活動,如果合適的話(可能不是,只是為了完整性而提及)

A 有一個“用戶交易”,可以根據用戶交互停止下載。 下載完成后,B 可以執行數據庫事務以使用下載內容的詳細信息更新自己的數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM