Cordova 中的 android 权限问题
Issues with android permissions in Cordova
我正在为 android 开发一个演示应用程序,它需要获取有关 phone、SIM、网络等的信息。我将所有代码放在一个插件中,然后我的 Java 检索 SIM 信息的函数如下所示:
private boolean getSIMInfo(CallbackContext cbc) throws JSONException {
// tm is a TelephonyManager instantiated in initialize
JSONObject res = new JSONObject()
.put("carrierID", tm.getSimCarrierId())
.put("carrierName", tm.getSimCarrierIdName())
.put("countryIso", tm.getSimCountryIso())
.put("operator", tm.getSimOperator())
.put("operatorName", tm.getSimOperatorName())
.put("state", tm.getSimState())
.put("msisdn", tm.getLine1Number()) // <== Requires permission
;
cbc.success(res);
return true;
}
只要我不打电话给 getLine1Number()
,一切都会好起来的。
getLine1Number()
需要设置 android.permission.READ_PHONE_STATE
或 a.p.READ_SMS
或 a.p.READ_PHONE_NUMBERS
。我首先在插件的 plugin.xml
中声明了 a.p.READ_PHONE_STATE
,然后我检查它是否被注入到 AndroidManifest.xml
中。
plugin.xml
的平台部分如下所示:
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="TelPlugin">
<param name="android-package" value="org.buguigny.CordovaPlugin.TelPlugin"/>
</feature>
</config-file>
<config-file parent="/*" target="AndroidManifest.xml" />
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</config-file>
<source-file src="src/TelPlugin.java" target-dir="src/org/buguigny/CordovaPlugin/TelPlugin" />
</platform>`
执行后出现错误:
getLine1NumberForDisplay: Neither user 10190 nor current process has
android.permission.READ_PHONE_STATE, android.permission.READ_SMS, or
android.permission.READ_PHONE_NUMBERS
我尝试了其他权限:同样的错误。
知道我做错了什么吗?
在 Android >=6.0 上,Android 应用程序应请求权限运行时。
因此在 Cordova 中,您可以使用 permission plugin 如下
permissions.requestPermission(permissions.READ_PHONE_STATE, success, error);
function error() {
console.warn('Camera permission is not turned on');
}
function success( status ) {
if( !status.hasPermission ) error();
}
我正在为 android 开发一个演示应用程序,它需要获取有关 phone、SIM、网络等的信息。我将所有代码放在一个插件中,然后我的 Java 检索 SIM 信息的函数如下所示:
private boolean getSIMInfo(CallbackContext cbc) throws JSONException {
// tm is a TelephonyManager instantiated in initialize
JSONObject res = new JSONObject()
.put("carrierID", tm.getSimCarrierId())
.put("carrierName", tm.getSimCarrierIdName())
.put("countryIso", tm.getSimCountryIso())
.put("operator", tm.getSimOperator())
.put("operatorName", tm.getSimOperatorName())
.put("state", tm.getSimState())
.put("msisdn", tm.getLine1Number()) // <== Requires permission
;
cbc.success(res);
return true;
}
只要我不打电话给 getLine1Number()
,一切都会好起来的。
getLine1Number()
需要设置 android.permission.READ_PHONE_STATE
或 a.p.READ_SMS
或 a.p.READ_PHONE_NUMBERS
。我首先在插件的 plugin.xml
中声明了 a.p.READ_PHONE_STATE
,然后我检查它是否被注入到 AndroidManifest.xml
中。
plugin.xml
的平台部分如下所示:
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="TelPlugin">
<param name="android-package" value="org.buguigny.CordovaPlugin.TelPlugin"/>
</feature>
</config-file>
<config-file parent="/*" target="AndroidManifest.xml" />
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</config-file>
<source-file src="src/TelPlugin.java" target-dir="src/org/buguigny/CordovaPlugin/TelPlugin" />
</platform>`
执行后出现错误:
getLine1NumberForDisplay: Neither user 10190 nor current process has
android.permission.READ_PHONE_STATE, android.permission.READ_SMS, or
android.permission.READ_PHONE_NUMBERS
我尝试了其他权限:同样的错误。
知道我做错了什么吗?
在 Android >=6.0 上,Android 应用程序应请求权限运行时。
因此在 Cordova 中,您可以使用 permission plugin 如下
permissions.requestPermission(permissions.READ_PHONE_STATE, success, error);
function error() {
console.warn('Camera permission is not turned on');
}
function success( status ) {
if( !status.hasPermission ) error();
}