3

私のアプリには Gmail アプリ (Android バージョンではありません) が必要です。Froyo または Gingerbread ではバージョン 2.3.6 以降である必要があります。Honeycomb および ICS では 4.0.5 以降。

また、「com.google.android.gm.permission.READ_CONTENT_PROVIDER」権限を使用しています。上記の権限は付与されていないか、古いバージョンの Gmail アプリでは利用できないと思います。

デバイスに最新の Gmail アプリが既にインストールされている場合、私のアプリは正常に動作します。ただし、ユーザーが最初にアプリをインストールしてから Gmail アプリを更新すると、アプリは失敗します。

Logcat は次のとおり
です: 古い Gmail アプリで起動:

08-14 16:13:12.370 E/DatabaseUtils(22386): java.lang.SecurityException: Permission Denial: reading com.google.android.gm.provider.PublicContentProvider uri content://com.google.android.gm/_____@gmail.com/labels from pid=22456, uid=10113 requires com.google.android.gm.permission.READ_CONTENT_PROVIDER

最新の Gmail アプリのインストール後に起動:

08-14 16:14:17.105 W/PackageManager( 1974): Not granting permission com.google.android.gm.permission.READ_CONTENT_PROVIDER to package com.ellevsoft.gmailunread because it was previously installed without


最も簡単な解決策は、アプリをアンインストールして再インストールすることです。
ユーザーにとって使いやすいものにしたい。許可を再要求する方法はありますか? Gmail アプリが更新されている (インストールされている) かどうかを検出し、許可を再度要求するブロードキャストレシーバーはありますか?

ありがとうございました。

4

2 に答える 2

2

いいえ、できません。Android ( PacakgeManagerService) は、認識しているアクセス許可のみを付与します。既にインストールされているアプリからのアクセス許可についてのみ認識します。それ以外はすべて無視されます。あなたができる最善の方法は、インストールされている Gmail のバージョンを確認し、それを更新してからアプリを再インストールするよう人々に指示することです。ところで、この許可は公開されていますか? Gmail では、サードパーティのアプリがそのデータを読み取ることを許可していないと思います。これはかなり前に変更されました。

于 2013-08-27T02:02:06.853 に答える
0

アクティビティの onCreate にあるこのコードを使用すると、Gmail バージョンがインストールされているアプリをユーザーが起動するたびにリクエストできます。

final int version_GB  = 236;
final int version_ICS = 405;

try 
{
    PackageInfo pInfo = getPackageManager().getPackageInfo("com.google.android.gm", 0);
    int version = Integer.parseInt(pInfo.versionName.replace(".", ""));

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && version >= version_ICS)
    {
        // Version 4.0.5 or higher on HONEYCOMB or higher
    }
    else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO && version >= version_GB)
    {
        // Version 2.3.6 or higher on FROYO or higher
    }
} 
catch (NameNotFoundException e) 
{
    // not installed...
}

必ず最初に新しい Android バージョンを確認してから、古いバージョンに移動してください。

于 2013-08-25T01:06:54.083 に答える