android-media-files-sharing について
android-media-files-sharingは、Androidでファイルやメディアの選択・共有機能を作る開発者向けのスキルです。Photo Picker、SAF、FileProvider、chooser APIの選択を案内し、最小限の権限とURI許可の管理を重視します。
主な機能
- 01Photo PickerとSAFの選択指針
- 02FileProviderとchooserによる共有
- 03Content URIと一時許可の管理
- 04MIMEタイプとauthorityの確認
- 05フォールバックと受信側互換性のレビュー
活用シーン
- 01Androidアプリへのメディア選択機能の追加
- 02アプリ所有ファイルの他アプリとの共有
- 03URI許可とフォールバック動作の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ krutikjain/ android-agent-skills --skill android-media-files-sharingインストール後、Claude Code で/android-media-files-sharingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/official-links.mdpatterns.mdscenarios.mdscripts/run_examples.sh詳細
Android メディアファイルの共有
使用する場面
- 次の内容に関するリクエストでこのスキルを使用します:Android でのファイル共有、Android アプリのフォトピッカー、Android の FileProvider の設定。
- 主な目的:最新の Android のファイル、メディア、ピッカー、FileProvider、共有シートの API を、権限を最小限に抑えて使用します。
- 主な問題がコンテンツ URI、共有シートのフロー、ピッカーの選択、アプリ間のファイル交換に関する場合は、このスキルを使用します。難しい点がランタイム権限フローそのものの場合に限り、
android-permissions-activity-resultsを使用します。 - 対象範囲が広がる場合は、次のスキルに引き継ぎます。
android-permissions-activity-resultsandroid-security-best-practices
ワークフロー
- アセットの移動経路を確認します。既存のメディアを選択する、ドキュメントを開く、ファイルを作成/エクスポートする、新しいコンテンツをキャプチャする、またはアプリが所有するコンテンツを別のアプリと共有する、のいずれかを特定します。
- 広範なストレージ権限を検討する前に、Photo Picker、SAF コントラクト、
FileProvider、または chooser ベースの共有など、最も対象を絞ったプラットフォーム機能を優先します。 - アプリ専用ストレージ、MIME タイプ、一時的な権限付与、安定した authority を使い、ファイルの所有権と URI の権限付与を明確にします。
- 正常系だけでなく、復帰フロー、機能が利用できない場合のフォールバック、受信側アプリとの相互運用性も検証します。
- URI と共有のコントラクトが正しいことを確認してから、ランタイム権限の複雑な処理や、より高度なセキュリティ強化を引き継ぎます。
ガードレール
- 可能な場合は、広範なメディア権限やストレージ権限よりも Photo Picker、SAF、chooser API を優先します。
- コンテンツの共有には
content://URI と一時的な権限付与を使用し、生のファイルパスは使用しません。 - エクスポートされる authority、MIME タイプ、キャッシュのクリーンアップを明確にします。
- アプリ外の受信側は信頼できないものとして扱います。アプリから出ていくデータと、アプリに戻ってくるデータを検証します。
アンチパターン
- Photo Picker または SAF で十分な場面で、広範なメディアアクセス権限やストレージアクセス権限を要求する。
FileProviderの URI ではなく、file://パスや誰でも読み取り可能なファイルを共有する。- すべての受信側アプリが、あらゆる MIME タイプや URI 権限を正しく扱うと想定する。
- 権限フローの設計とファイル共有コントラクトの設計を混在させ、両方を不明瞭にする。
レビューの重点項目
- ピッカー/SAF/FileProvider/chooser の選択。
- MIME タイプ、URI authority、権限付与のライフサイクルの正確性。
- 権限を最小限に抑えたメディアアクセス。
- 受信側アプリとの相互運用性と一時ファイルのクリーンアップ。
例
正常系
- シナリオ:最小権限の API を使って、タスクのスナップショットを添付して共有する。
- コマンド:
cd examples/orbittasks-compose && ./gradlew :app:testDebugUnitTest
エッジケース
- シナリオ:XML フィクスチャで、ピッカーが利用できない場合やメディア機能が拒否された場合に対応する。
- コマンド:
cd examples/orbittasks-xml && ./gradlew :app:testDebugUnitTest
障害からの復旧
- シナリオ:メディア/ファイルのフローを、権限のみ、またはネットワークのみのリクエストと切り分ける。
- コマンド:
python3 scripts/eval_triggers.py --skill android-media-files-sharing
完了チェックリスト
- 可能な場合、プラットフォーム機能の選択範囲を広範なストレージ権限よりも狭くしています。
- URI authority、MIME タイプ、一時的な権限付与を明示しています。
- ピッカーと共有シートのフォールバックを網羅しています。
- 権限のみの作業を共有コントラクトと混同せず、適切なスキルに引き継いでいます。
公式リファレンス
- https://developer.android.com/training/data-storage/shared/photopicker
- https://developer.android.com/training/data-storage/shared/documents-files
- https://developer.android.com/training/secure-file-sharing/setup-sharing
- https://developer.android.com/training/sharing/send
- https://developer.android.com/topic/performance/graphics/picker
コメント
Markdown 対応