在每个应用程序的Google Play网页上都有一个权限部分.几乎所有这些应用程序都使用一些标准术语来描述他们的权限,例如" READ PHONE STATUS AND IDENTITY"," SEND SMS"," FULL INTERNET ACCESS"等.但是在Android Developer的页面上,权限被列为常量及其描述,但不是Google Play网页上的标准术语.申请.
例如,有一个String Internet描述,Allows applications to open network sockets但没有FULL INTERNET ACCESS通常用于本说明的许可.
是否有一些链接提供了权限常量到这些标准权限表示法的映射?
我正在尝试将Flurry集成到我的应用程序中。安装时,我的应用程序要求的权限之一是“检索正在运行的应用程序权限”。据我了解,这是访问设备上其他应用程序的权限。我对此有两个问题:
我的应用程序正在使用设备的位置服务,是否需要此权限?
如果不是第一个,那么Flurry是否有可能需要此许可?
也是这种许可通常会引起关注和怀疑吗?
我已经构建了一个自定义的Android ROM.我已经使用平台签名签署了我的应用程序,并已添加android:sharedUserId="android.uid.system"到清单文件中.我的应用程序被授予所有"签名"和"系统"级别权限,但未授予对系统文件的访问权限.
Log.w("PC", String.valueOf(checkCallingOrSelfPermission("android.permission.ACCESS_SURFACE_FLINGER")== PackageManager.PERMISSION_GRANTED)); // true
Log.w("PC", String.valueOf(checkCallingOrSelfPermission("android.permission.READ_FRAME_BUFFER")== PackageManager.PERMISSION_GRANTED)); // true
Log.w("PC", String.valueOf(checkCallingOrSelfPermission("android.permission.INJECT_EVENTS")== PackageManager.PERMISSION_GRANTED)); // true
Log.w("PC", String.valueOf(new File("/dev/graphics/fb0").canRead())); // false
Log.w("PC", String.valueOf(new File("/data/misc/wifi/wpa_supplicant.conf").canRead())); // false
Run Code Online (Sandbox Code Playgroud)
文件的权限是:
ls -l /dev/graphics/fb0
crw-rw---- root graphics 29, 0 2014-02-12 09:43 fb0
ls -l /data/misc/wifi/wpa_supplicant.conf
-rwxrwx--- wifi wifi 282 2014-02-11 19:04 wpa_supplicant.conf
Run Code Online (Sandbox Code Playgroud)
有没有办法获得这些文件的访问权限?
我的测试人员表示他无法将Play应用程序中的应用安装到他的Nexus 5(Lollipop).他说他得到了这个错误
Unknown error code during application install “-505”
Run Code Online (Sandbox Code Playgroud)
我拿起手机试着通过adb安装应用程序,我收到了这个错误
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION
perm=com.example.gcm.permission.C2D_MESSAGE
pkg=com.mailchimp.alterego]
Run Code Online (Sandbox Code Playgroud)
经过一番阅读,我从@Commonsware看到了这篇文章
http://commonsware.com/blog/2014/08/04/custom-permission-vulnerability-l-developer-preview.html
很明显,我的应用程序和Mailchimp应用程序(安装在我的测试人员手机上)都有重复的权限,com.example.gcm.permission.C2D_MESSAGE.然后我检查我的git日志,看看我什么时候将该行添加到我的AndroidManifest,发现它是在我实现GCM的时候.那时,我遵循了本教程
https://developer.android.com/google/gcm/client.html

我想,我和Mailchimp开发人员都遵循相同的教程,添加了相同的权限,现在我们的应用程序都有重复的权限.
所以,我从AndroidManifest中删除了该权限,现在我可以在我的测试人员的手机上安装我的应用程序了.我通过从我的PHP脚本发送到包到GCM服务器的测试GCM消息,应用程序仍然得到GCM消息.
那么,是否会因为缺少许可而提出其他问题,无论如何获得该许可的重点是什么?(因为没有它,我的应用程序仍然收到GCM消息)
我担心的是,如果我们的应用程序使用的是需要权限的插件/库.如果有另一个安装的应用程序使用相同的库,我们将无法在Lollipop设备上安装我们的应用程序,不是吗?
- 注意 -
我已经读过这个问题了,很少有人对我所做的事情提出同样的建议,取消许可.但没有人谈论我们做之后会发生什么,或者为什么我们必须添加它.
INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE
- 编辑1 -
我回到教程,教程是对的,这是我错误的实现

我(和Mailchimp开发人员)应该使用我们的应用程序包+ .permission.C2D_MESSAGE的名称添加权限,而不是仅复制并粘贴com.example.gcm.permission.C2D_MESSAGE
<permission android:name="com.mycompany.myappname.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
Run Code Online (Sandbox Code Playgroud)
但是,这给我提出了另一个问题,教程说,如果我们不添加此权限或名称与模式不匹配,应用程序将无法获取消息.但是当我测试时,即使我删除时,我收到了消息这个漏洞......很奇怪.
android google-cloud-messaging android-permissions android-5.0-lollipop
我最近将应用程序更新为23的targetSdkVersion,并实现了对各种权限的请求.我最初尝试使用ActivityCompat.requestPermissions()导致从FragmentActivity的内部抛出IllegalArgumentException:
int REQUEST_CODE_A = 9001;
ActivityCompat.requestPermissions(new String[ {Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_A); // crashes
Run Code Online (Sandbox Code Playgroud)
java.lang.IllegalArgumentException:对于requestCode只能使用低8位
但是,如果请求代码在0到255之间,则一切正常,并且权限请求按预期工作.
int REQUEST_CODE_B = 101;
ActivityCompat.requestPermissions(new String[ {Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_B); // works correctly
Run Code Online (Sandbox Code Playgroud)
所以问题是,在这样的API中限制整数的可能值的原因是什么?可以使用一个字节提供相同的信息,但是(显然)有意识地决定使用整数.这只是一个允许未来可扩展性的案例吗?
I need to ask for runtime permission to use camera in my fragment class.my code is like this..
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_ASK_PERMISSIONS);........
Run Code Online (Sandbox Code Playgroud)
但是,它显示 - 无法解析符号'CAMERA'
android android-camera android-permissions android-6.0-marshmallow runtime-permissions
如果我处于调试模式,有没有办法自动授予运行时权限?
因为如果我清除数据,我必须再次授予所有权限.它在调试中很无聊.
谢谢.
android android-permissions android-debug runtime-permissions
我最近更新了Android应用的代码,以请求Android 6.0+的权限.但是,我现在面临着如何检查权限的困境.
我看到人们在检查权限之前在线查看操作系统版本,因为23之前的版本,由于在安装时授予权限,因此无需检查权限.
现在我的支票看起来像这样,
if(checkPermissions()){
doThings();
} else {
requestPermissions();
}
Run Code Online (Sandbox Code Playgroud)
但是我应该努力添加这个吗?
if (Build.VERSION.SDK_INT >= 23) {
if(checkPermissions()){
doThings();
} else {
requestPermissions();
}
} else {
doThings();
}
Run Code Online (Sandbox Code Playgroud)
从我的理解中我没有看到将后者添加到代码中的重点,旧版本的android可能会遇到第一个示例代码就好了.
这一切让我想问,在这种情况下检查Android版本有什么好处?
关于WRITE_EXTERNAL_STORAGE,Android文档说明了这一点
从API级别19开始,读取/写入getExternalFilesDir(String)和getExternalCacheDir()返回的特定于应用程序的目录中的文件不需要此权限.
我的应用程序只读取和写入Android/data //文件目录.这是否意味着,为了在我的应用程序在早于19的Android版本上运行时读取和写入此特定目录,我仍然需要在清单中声明此权限?
我EasyPermission习惯于permissions从用户那里获取。
@AfterPermissionGranted(PERMISSIONS_REQUEST_READ_SMS)
private void readSMS() {
String[] perms = {Manifest.permission.READ_SMS};
if (EasyPermissions.hasPermissions(this, Manifest.permission.READ_SMS)) {
initSMS();
} else {
// Do not have permissions, request them now
EasyPermissions.requestPermissions(this, getString(R.string.send_sms_rationale),
PERMISSIONS_REQUEST_READ_SMS, Manifest.permission.READ_SMS);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的initSMS() 我曾试图从Android设备阅读的邮件。它适用于除设备之外的所有Xiaomi设备。我使用TelephonyProvider课堂阅读消息。
private void initSMS() {
TelephonyProvider provider = new TelephonyProvider(this);
List<Sms> sms = provider.getSms(TelephonyProvider.Filter.INBOX).getList();
for(int i = 0; i <= sms.size() - 1; i++) {
Log.d("Address",sms.get(i).address);
Log.d("Sms",sms.get(i).body);
Log.d("ReceivedDate",""+sms.get(i).receivedDate));
Log.d("State",""+sms.get(i).status);
Log.d("person",""+sms.get(i).person);
}
}
Run Code Online (Sandbox Code Playgroud)
他们有什么办法读取Xiaomi设备中的所有消息吗?