Android 获取联系人时提示错误

错误信息:java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{765d76f 31960:com.re.mywebview/u0a265} (pid=31960, uid=10265) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS

程序目的:在JS中调用Android的接口方法,简单读取联系人信息并显示在html页面中。

AndroidManifest.xml文件已经加入了权限:

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

修改几处:

1、targetSdkVersion 27,经查找资料发现,23以上的版本读取联系人均会出现以上错误,修改为22或者22以下。

2、传递给js调用的业务类中的方法提取到一个线程中使用,如:

public class SharpJS {
    @JavascriptInterface
    public void contactlist() {
        handler.post(new Runnable() { //add 
            @Override
            public void run() {
		//method add
                try {
                    System.out.println("contactlist()方法执行了!");
                    String json = buildJson(getContacts());
                    wView.loadUrl("javascript:show('" + json + "')");
                } catch (Exception e) {
                    Log.e("error:",e.getMessage());
                }
		//method end
            }
        });
    }
    @JavascriptInterface
    public void call(final String phone) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                System.out.println("call()方法执行了!");
                Intent it = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone));
                try {
                    startActivity(it);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
如果不在同一线程中调用方法,会报如下错误:

 WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {10ec681} called on Looper (JavaBridge, tid 10834) {4483fc6}, FYI main Looper is Looper (main, tid 1) {10ec681}

以上也是查询资料并实际操作所得,仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值