2013-08-20 138 views
3

我的應用需要Gmail應用(而不是Android版本)的Froyo或Gingerbread版本爲2.3.6或更高; Honeycomb和ICS上的4.0.5或更高版本。Android:重新請求權限

此外,我使用「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/[email protected]/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應用是否正在更新(安裝)並再次請求許可?

謝謝。

回答

2

不,你不能那樣做。 Android(PacakgeManagerService)只會授予您所知的權限。它只知道已安裝的應用程序的權限。其他一切都被忽略。你可以做的最好的檢查安裝的Gmail版本,並指示人們更新它,然後重新安裝你的應用程序。順便說一句,這是公開的權限?我不認爲Gmail允許第三方應用程序讀取其數據,他們在一段時間前改變了這一點。

+0

過去由多個應用程序使用的非官方內容提供商不再適用於外部應用程序,而是提供可供您使用的官方只讀內容提供商,這是正確的。它更受限制,並且不會授予您對電子郵件內容的訪問權限,但這是使用上述權限的權限。有關Gmail API的更多詳細信息,請閱讀以下內容:http://android-developers.blogspot.co.il/2012/04/gmail-public-labels-api.html – Muzikant

+0

那個,它只顯示標籤和計數。很高興聽到它仍然有效:) –

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版本,然後再轉到舊版本。

+0

感謝您檢查Gmail應用版本的代碼。但是,我「真正」想知道的是重新申請這項權利。因爲即使在Gmail應用更新後,我的應用仍然會失敗。它未經許可安裝。 – jclova