1

私のターゲットシナリオ:ユーザーは自分の好みのメールアプリで添付ファイルを開きます。私のアプリは添付ファイルを開く/表示するように提案され、ユーザーは私のアプリを選択し、私のアプリはContentResolver.openInputStream(uri)を介して添付ファイルURIを開き、そこから読み取ります。

これは通常うまく機能します。ただし、いくつかの電子メールアプリには、com.fsck.k9.permission.READ_ATTACHMENT、com.android.email.permission.READ_ATTACHMENT、com.motorola.blur.service.email.Permissionsなどの特別なアクセス許可が必要であることがわかりました。 .INTERACTなど

市場に出回っているすべてのメールアプリにuses-permission-tagを追加するのは悪い設計だと思います。一般的に添付ファイルを読むことができるより良い方法はありますか?

さらに、リリースごとに使用許可をアプリに継続的に追加することにした場合でも、別の問題が発生します。許可が必要なアプリがアプリのにインストールされている場合、その時点でアプリに許可がありません。私のアプリのインストールでは、そのような権限が存在することさえパッケージマネージャーに知られていませんでした。

それで、ユーザーが新しい電子メールに切り替えることを決定した場合、ユーザーにアプリを再インストールするように本当に指示する必要があります-私のアプリがすでに使用しているアプリ-許可?私のアプリが彼らのシステムに最初にあったという理由だけで??

どんな助けでも大歓迎です。読んでくれてありがとう!!

4

1 に答える 1

2

これで、これらすべてのカスタム権限をアプリから削除しても、添付ファイルを読み取ることができます。

小さなことを除いて、私はすべてを正しくやっていたことがわかりました...

...私は2つのアクティビティで添付ファイルの読み取りを処理していました。最初のActivity-私のメインActivity-は、情報を収集し、Intentインポートされるデータを格納するためのデータベースを選択/準備する責任があります。2つ目Activityは、実際にInputStream取得した経由から読み取りContentResolver、データベースにインポートすることです。

FLAG_GRANT_READ_URI_PERMISSIONの受信者にのみ許可を与えることが判明しましたIntentUri添付ファイルを1 に渡していたので、Activityそれを読み取ることはできませんでした。アプリにいくつかのカスタムを付与するだけで、Permissions上記のように実際にはお勧めできないソリューションです。

私の解決策は、最初のデータをすべて読み取りActivity、一時ファイルに保存して、このファイルUriを2番目のファイルに渡すことActivityです。もちろん、今はコピーにかかる時間を気にする必要があります。進行状況ダイアログを表示し、一時的に十分なスペースを見つけることができる場所を特定して、オリジナルにアクセスするUri方がはるかに簡単に思えます。

于 2012-11-12T06:24:54.457 に答える