1

私のアプリケーションは、アプリケーションで開く特定のファイルを受け入れますが、最近いくつかのクラッシュを見ました。

java.lang.RuntimeException: Unable to start activity  java.lang.SecurityException: Permission Denial: opening provider com.yahoo.mobile.client.android.mail.provider.MailProvider from ProcessRecord{42cb5ff0 7953:com.my.package/u0a10163} (pid=7953, uid=10163) that is not exported from uid 10147

私の AndroidManifest.XML には、次の権限があります

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="com.android.setting.permission.ALLSHARE_CAST_SERVICE" />
<uses-permission android:name="com.android.vending.BILLING" />

特に Yahoo で不足している可能性のある許可はありますか? 私はそれが明確にブロックされていると感じています。もしそうなら、Yahoo の添付ファイルが自分のアプリで開かれないようにする方法はありますか? ありがとう

4

2 に答える 2

1

特に Yahoo で不足している可能性のある許可はありますか?

そのエラーに基づいていません。このエラーは、Yahoo がContentProvider( com.yahoo.mobile.client.android.mail.provider.MailProvider) を作成し、セキュリティを台無しにしたことを示しています。を使用FLAG_GRANT_READ_URI_PERMISSIONしてACTION_VIEW Intent、それ以外の場合はエクスポートされないプロバイダーがファイルの内容を提供できるようにする必要があります。

もしそうなら、Yahoo の添付ファイルが自分のアプリで開かれないようにする方法はありますか?

例外をキャッチし、起動したアプリが壊れていることをユーザーに指摘します。

マニフェストに「...でもYahooメールではない」と言えるものは何もありません。

于 2015-02-22T00:22:27.607 に答える
0

yahoo のアプリ データ プロバイダーが正しく構成されていないという CommonsWare に同意します。次のいずれかを行う必要があります。

  • android:exported=true を宣言して (特定の権限を宣言せずに)、外部アプリへのコンテンツ プロバイダーへの無料アクセスを許可します。


  • マニフェストのプロバイダー タグで android:grantUriPermissions=true を指定し、アクション インテントで FLAG_GRANT_READ_URI_PERMISSION フラグを設定して、一時的なアクセス許可を宣言します。

しかし、私の場合、別の解決策を見つけました:

Context.grantUriPermission((String toPackage, Uri uri, int modeFlags)

通常、このメソッドは、別のパッケージへのアクセスを許可するプロバイダー アプリから呼び出す必要がありますが、今回はアプリからこのメソッドを呼び出します。

grantUriPermission(BuildConfig.APPLICATION_ID, fileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);​ 

指定されたファイルへのアクセスを取得し、yahoo の添付ファイルを開くことができました。

于 2015-06-15T12:32:08.660 に答える