2013-08-20 139 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