2015-08-20 160 views
8

我对新的运行时权限模型仍有点困惑。解析推送通知(GCM)需要以下任何权限是否需要运行时权限?Android M权限解析推送通知

<uses-permission android:name="android.permission.INTERNET" /> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

<uses-permission android:name="android.permission.VIBRATE" /> 

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

<permission android:protectionLevel="signature"   android:name="com.parse.starter.permission.C2D_MESSAGE" /> 

<uses-permission android:name="com.parse.starter.permission.C2D_MESSAGE" /> 
+0

你不需要请求对6.0+的GET_ACCOUNTS权限,使解析推动工作。它在Manifest中声明,因此它可以支持Android 4.04或更低版本。在6.0+上,此权限已声明,但不需要“授予” – jiawen

回答

-3

按照Android开发文档,只要你定义你的清单这些权限,系统会自动向您授予这些权限并不允许用户将其撤消。因此,您不需要在运行时检查这些权限。

https://developer.android.com/preview/features/runtime-permissions.html

该页面在正常权限部分底部说。

+0

您的参数无效。其中一些未在正常权限下列出。 –

1

GET_ACCOUNTS权限需要在运行时检查权限,因为它属于危险权限组(https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous)。

其他的人是正常的权限,只要他们是在清单文件中声明将被授予(https://developer.android.com/guide/topics/security/normal-permissions.html

如果你意识到你没有在运行许可,您将需要请求它使用requestPermissions(Activity yourActivity,String []权限,int requestCode)。之后,会向用户显示一个不可定制的对话框,请求许可。

最后,你需要重写onRequestPermissionsResult(INT requestCode,字符串权限[],INT [] grantResults)方法您的活动,检查是否requestCode是你requestPermissions发出同样的requestCode,如果目标权限是理所当然的。

还有其他一些情况需要考虑,比如当用户第一次不授予许可时,你仍然想问他/她。为了知道如何处理这种情况,我建议你阅读: http://developer.android.com/intl/pt-br/training/permissions/requesting.html。它还具有用于请求权限和检查结果的示例代码

+0

那么如果权限被拒绝,你如何建议我去做? –

+0

我编辑我以前的答案与更好的解释有关 –

+0

我明白这一切,但我将如何禁用此用户的解析推送通知? –

5

在上面列出的权限中,GET_ACCOUNTS需要运行时检查,因为其保护级别很危险。

但事情是,虽然GET_ACCOUNTS权限不再需要GCM的工作(从7.5播放服务,我猜),如果您使用解析推送通知仍然需要。

看来,为了让Parse能够完全兼容整个android系列设备(即基于非GCM的设备,如Kindle Fires,其中GCM不受支持,它们必须回退到自己的持久套接字实现当然还有4.0.3及以下的设备),Parse仍然需要这个权限和其他一些权限。

从解析家伙提到:

我们要求它被要求,在AndroidManifest.xml又名之中,但 不需要它被授予。

的问题在讨论中,你可能想看看这些主题:

https://github.com/ParsePlatform/Parse-SDK-Android/issues/129 https://parse.com/questions/android-use-only-gcm-dont-require-additional-permissions