使用 React Native 在 Android 中對特定後綴名的文件進行關聯和導入導出

關聯特定文件後綴名

關鍵詞:intent 註冊 和 官方文檔中 Linking 一節

  1. AndroidManifest.xml 中將 MainActivity 的 launchMode 改爲 singleTask
  2. 增加合適的 intent-filter 如下

    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="file" />
        <data android:host="*" />
        <data android:mimeType="*/*" />
        <data android:pathPattern=".*\\.fileExtension" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
       <!--注意下面是 content -->
        <data android:scheme="content" />
        <data android:host="*" />
        <data android:mimeType="*/*" />
        <data android:pathPattern=".*\\.fileExtension" />
    </intent-filter>
  3. 假如你的文件名包含很多 .,比如 abc.mobile.version.backup.fileExtension,由於 pathPattern 匹配模式的原因,目前找到的解決方式是加一堆這樣的東西:

        <data android:pathPattern=".*\\..*\\.fileExtension" />
        <data android:pathPattern=".*\\..*\\..*\\.fileExtension" />
        <data android:pathPattern=".*\\..*\\..*\\..*\\.fileExtension" />
        <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.fileExtension" />
        <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.fileExtension" />

導出

這個比較簡單,不多說了。請求權限後用 lib copy 就行了。

導入

導入也很簡單,麻煩的是想要在微信或文件管理器中打開文件時,app 出現在選擇列表裏。
爲此我看了一堆 intent activity 相關的文檔,然後發現之前忽略的 Linking 就足夠用了。。。。只是 facebook 的文檔寫的很有迷惑性,裏面用了一堆 url 讓你覺得它只是 http 之類的東西。
事實上,只需要做好文件後綴關聯,RN 內部已經實現了 intent 相關的處理,在你的應用相對簡單沒有一堆 Activity 時,使用 Linking 已經足夠了。完全可以拿到 file:// 或者 content:// 相關的內容。而且無需費力再去思考 onResume 怎麼拿到新的 intent 內容
之後只需要使用 lib 對得到的 url 進行處理就 OK 了。

「手動狗頭」

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章