java-有些电话需要权限READ_CONTACTS才能从联系人选择器中读取

java-有些电话需要权限READ_CONTACTS才能从联系人选择器中读取,第1张

概述我有HTCONEM7(GPE4.2.2)和HTCEVO3D(4.0.3)HTCSense3.6HTCONE不需要:<uses-permissionandroid:name="android.permission.READ_CONTACTS"/>但是,在HTCEVO3D上,以下代码引发异常:publicstaticStringgetPhoneNumberFromIntent(Contextcontext,Intentdat

我有HTC ONE M7(GPE 4.2.2)和HTC EVO 3D(4.0.3)HTC Sense 3.6

HTC ONE不需要:

<uses-permission androID:name="androID.permission.READ_CONTACTS" /> 

但是,在HTC EVO 3D上,以下代码引发异常:

 public static String getPhoneNumberFromIntent(Context context, Intent data) throws SecurityException {    String contactNumber = null;    final Uri contactUri = data.getData();    if (contactUri != null) {        Cursor c = null;        try {            // Read contact number from contacts provIDer            String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER};            c = context.getContentResolver().query(contactUri, projection, null, null, null);            if (c != null && c.movetoFirst()) {                int maxnumberLength = context.getResources().getInteger(R.integer.max_phone_number_cze);                contactNumber = cutOnlyLastPhoneNumberDigits(c.getString(0), maxnumberLength);            }        } finally {            if (c != null) {                c.close();            }        }    }    return contactNumber;}

java.lang.SecurityException: Permission Denial: reading com.androID.provIDers.contacts.HtcContactsProvIDer2uri content://com.androID.contacts/data/2158 from pID=14938, uID=10125 requires androID.permission.READ_CONTACTS

我已经读过,当用户手动选择联系人时,会向应用程序授予必需的权限.但是,在某些手机上,此功能不起作用(HTC EVO 3D).

为什么会这样呢?有没有变通办法,例如能够在运行时请求此权限?

解决方法:

HTC ONE does not need: <uses-permission androID:name="androID.permission.READ_CONTACTS" /> on HTC EVO 3D however, following code throws an exception

如果您获取的Uri来自ACTION_PICK或ACTION_GET_CONTENT,则是否具有该联系人的临时读取权限将因联系人选择应用程序而异.

I have read that appliaction is granted required permissions when user selects contact by hand. However on some phones this does not work (HTC EVO 3D).

无需所有选择联系人的应用都向您授予对该联系人的临时读取权限.实际上,我不清楚第三方联系人管理器是否可以授予您对该联系人的临时读取权限.

Is there a workaround such is ability to ask for this permission at runtime ?

您无法在运行时更改候选权限的混合.

您的选择是:

>始终在清单中要求READ_CONTACTS.这样可以确保您可以执行所需的 *** 作,而又需要请求另一个潜在用户可能不喜欢的权限.
>处理SecurityException,如果该数据不是必需的,则不使用您要查询的数据().
>使用READ_CONTACTS权限编写一个单独的应用程序,该应用程序可用作您的应用程序的“插件”,代表您的主应用程序安全地获取联系人数据.然后,您可以路由获得SecurityException的用户来安装联系人插件.在不引入安全漏洞的情况下编写此技巧非常棘手,因此我鼓励您使用其他任何一个选项.

总结

以上是内存溢出为你收集整理的java-有些电话需要权限READ_CONTACTS才能从联系人选择器中读取全部内容,希望文章能够帮你解决java-有些电话需要权限READ_CONTACTS才能从联系人选择器中读取所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1088571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存