2017-02-21 90 views
4

我有我的应用程序针对棒棒糖在安装时授予权限。
然后我瞄准牛轧糖(因为我去年没有时间,所以我跳过了棉花糖),所以我必须在安装后立即在运行时创建权限请求。没关系,我花了一些时间,但应用程序要求他们没有任何问题,并且如果没有被授予,则行为正确。更新应用程序到棉花糖或牛轧糖

不过,我的问题是:
我有成千上万的用户安装,现在的应用程序,更新后他们被要求再次授予的权限,即使他们在更新之前已经批准。结果是,我每天都失去很多用户。他们认为该应用正在寻求新的权限。我很难向他们解释这些权限是在更新之前被授予的,并且该应用程序不是“危险的”,事实上,许多这些用户已经使用了该应用程序多年,但现在他们只是不信任。

所以,我的问题是:我可以在某些方面回滚?
我可以让Playstore尊重更新前已被授予的权限吗?
我知道运行时权限应该用于新安装,而不是更新。我认为谷歌在这里(再次)做错了。

回答

0

我不这么认为。我同意这是一种痛苦,但Google想要的是在安装时摆脱授予权限的方案,然后再也不要再问。

你可以做的最好的事情莫过于控制情况一点,并检测是否在启动时授予权限,如果他们不是,请将用户引导到一个奇特的活动,告诉用户你的挫败感谷歌,和他/她需要重新授权的权限为他/她自己的安全等等

您可以使用类似这样

/** 
    * Check the application has Permissions 
    * 
    * @param context App context 
    * @return Whether 
    */ 

    static boolean hasPermissions(Context context, String[] permissions) { 
     for (String p : permissions) { 
      if (ActivityCompat.checkSelfPermission(context, p) != PackageManager.PERMISSION_GRANTED) 
       return false; 
     } 
     return true; 
    } 

,然后查询任意权限:

boolean hasMyPermissions = hasPermissions (context, { 
      android.Manifest.permission.READ_CONTACTS, 
      android.Manifest.permission.ACCESS_FINE_LOCATION, 
      android.Manifest.permission.ACCESS_COARSE_LOCATION, 
      android.Manifest.permission.CALL_PHONE, 
      android.Manifest.permission.READ_EXTERNAL_STORAGE 
    }); 

    if (!hasMyPermissions) { 

     // open a cool activity/fragment/etc with graphics, fancy text, etc.. then 
     // ask the user for permissions 
     ActivityCompat.requestPermissions(context, permissions, PERMISSIONS_REQUEST_CODE); 

    } 

您将得到回调onRequestPermissionsResult

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if (requestCode == PERMISSIONS_REQUEST_CODE) { 
     // permissions: Same String[] with your req permissions 
     // grantresults: wether each individual permission has been granted or not 
    } 
} 
+0

谢谢,但你不明白的问题。我有我的应用程序安装在50000设备。它针对的是棒棒糖。然后我修改它,将其设置为针对Nougat并在运行时请求权限。它运行良好,但问题是它要求对已安装设备的50000个权限。因为一旦更新,应用程序没有授予权限,因此它会要求它们。这使得许多用户不喜欢该应用,因为他们认为该应用需要新的权限。用户不记得第一次安装时授予的权限。 – Ton

+0

我明白你的问题。不幸的是,没有解决方案(afaik)。我建议你以某种方式通过显示自定义UI并通知用户来控制权限重新授予。否则,请告诉您的用户降级为棒棒堂:( – rupps

+2

)所以,正如我所说的,Google这次做出了一个可怕的决定(再一次) – Ton