質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.13%

DocumentsProviderを用いたSAF実装について

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,538
退会済みユーザー

退会済みユーザー

前提・実現したいこと

自作のアプリから出力したテキストファイルをChatwork(Android版)を経由し
アップロードしようと考えています。

Chatworkからアップロードする際にファイルが簡単に選択できるよう
SAF上に独自のフィルタを設けようとDocumentProviderを継承し検証を行いました。

動作としては /sdcard/emulated/0/Android/data/*/files 配下のファイルを列挙するだけです。

実装にはGoogleのサンプルをほぼ転用
https://developer.android.com/samples/StorageProvider/index.html?hl=ja

発生している問題

SAF上に項目は追加され、ファイルリストも表示されましたが、ファイルを選択すると

「このファイルのアップロードはサポートしていません」

とChatworkからエラーメッセージが表示されます。(logcat上にエラーは出力されず)

この問題の原因をご存知の方がおられましたら、ご助言いただけますと幸いです。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="{BUNDLE_NAME}">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="false">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <provider
            android:name=".TestProvider"
            android:authorities="{BUNDLE_NAME}.documents"
            android:exported="true"
            android:grantUriPermissions="true"
            android:permission="android.permission.MANAGE_DOCUMENTS">
            <intent-filter>
                <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
            </intent-filter>
        </provider>
    </application>
</manifest>

試したこと

Google Drive で確認 → アップロードできた
Chatworkの「ダウンロード」や「最近」から選択 → アップロードできた

COLUMN_MIME_TYPE が text/plain になっているか確認
COLUMN_FLAGS の各フラグを立てる
WRITE_EXTERNAL_STORAGE パーミッションを与える

補足情報(言語/FW/ツール等のバージョンなど)

Androidバージョン
6.0.1

Chatworkバージョン
4.1.1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる