Android - 安装我的应用程序时,默认设置 "No permission allowed"?
Android - when ever my app is installed, by default "No permission allowed" is set?
我的应用程序是通过 Google Play 或 USB 安装的
(与所有其他通用应用程序一样使用麦克风、摄像头),默认情况下应用程序获取 "No permission allowed".
因此,在全新安装后它永远无法运行。
除非有人手动进入应用程序设置并进行更改。
我做错了什么?为什么会导致默认进入拒绝权限模式?
AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
编辑:
C:\cordova\tpt>cordova plugin add cordova.plugins.diagnostic
Fetching plugin "cordova.plugins.diagnostic" via npm
Installing "cordova.plugins.diagnostic" for android
ANDROID_HOME=C:\Users\tpt\AppData\Local\Android\sdk
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121
Subproject Path: CordovaLib
null
org.xwalk:xwalk_core_library:23+
Incremental java compilation is an incubating feature.
:clean FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':clean'.
> Unable to delete directory: C:\cordova\tpt\platforms\android\build\outputs\apk
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 3.83 secs
Failed to install 'cordova.plugins.diagnostic':Error: cmd: Command failed with exit code 1
at ChildProcess.whenDone (C:\cordova\tpt\platforms\android\cordova\node_modules\cordova-common\src\superspawn.js:169:23)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:886:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
Error: cmd: Command failed with exit code 1
从 Android Marshmallow (6.0) 开始,您必须在 运行 时请求权限。这样用户可以手动接受或拒绝您需要的每个权限。
有关实现权限的帮助,请参阅 Android documentation。
这可以防止应用程序在未经用户同意的情况下'secretly'使用私人设备和用户信息。
从 Android M 开始,您需要为所需的每个权限请求运行时权限。
请求联系人权限的示例是:-
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
} else {
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}
}
您需要在代码中为Marshmallow及以上设备设置权限。插件也提供此功能。
Sample reference mentioning the same 即使提到了 ionic,在 cordova 项目中也需要使用相同的方法
要获得权限状态,请复制如下。
cordova.plugins.diagnostic.getPermissionAuthorizationStatus(function (status) {
console.log(status);
switch (status) {
case cordova.plugins.diagnostic.runtimePermissionStatus.GRANTED:
//call the target method
break;
case cordova.plugins.diagnostic.runtimePermissionStatus.NOT_REQUESTED:
setPermission();
break;
case cordova.plugins.diagnostic.runtimePermissionStatus.DENIED:
setPermission();
break;
case cordova.plugins.diagnostic.runtimePermissionStatus.DENIED_ALWAYS:
setPermission();
break;
}
}, this.errorCallback, cordova.plugins.diagnostic.runtimePermission.ACCESS_COARSE_LOCATION);
并请求授权
function setPermission() {
cordova.plugins.diagnostic.requestLocationAuthorization(function (status) {
switch (status) {
case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED:
break;
case cordova.plugins.diagnostic.permissionStatus.DENIED:
break;
case cordova.plugins.diagnostic.permissionStatus.GRANTED:
//TODO : Call native plugin.
break;
case cordova.plugins.diagnostic.permissionStatus.GRANTED_WHEN_IN_USE:
break;
}
}, function (error) { }, cordova.plugins.diagnostic.locationAuthorizationMode.ALWAYS);
}
我的应用程序是通过 Google Play 或 USB 安装的 (与所有其他通用应用程序一样使用麦克风、摄像头),默认情况下应用程序获取 "No permission allowed".
因此,在全新安装后它永远无法运行。
除非有人手动进入应用程序设置并进行更改。
我做错了什么?为什么会导致默认进入拒绝权限模式?
AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
编辑:
C:\cordova\tpt>cordova plugin add cordova.plugins.diagnostic
Fetching plugin "cordova.plugins.diagnostic" via npm
Installing "cordova.plugins.diagnostic" for android
ANDROID_HOME=C:\Users\tpt\AppData\Local\Android\sdk
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121
Subproject Path: CordovaLib
null
org.xwalk:xwalk_core_library:23+
Incremental java compilation is an incubating feature.
:clean FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':clean'.
> Unable to delete directory: C:\cordova\tpt\platforms\android\build\outputs\apk
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 3.83 secs
Failed to install 'cordova.plugins.diagnostic':Error: cmd: Command failed with exit code 1
at ChildProcess.whenDone (C:\cordova\tpt\platforms\android\cordova\node_modules\cordova-common\src\superspawn.js:169:23)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:886:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
Error: cmd: Command failed with exit code 1
从 Android Marshmallow (6.0) 开始,您必须在 运行 时请求权限。这样用户可以手动接受或拒绝您需要的每个权限。
有关实现权限的帮助,请参阅 Android documentation。
这可以防止应用程序在未经用户同意的情况下'secretly'使用私人设备和用户信息。
从 Android M 开始,您需要为所需的每个权限请求运行时权限。
请求联系人权限的示例是:-
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
} else {
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}
}
您需要在代码中为Marshmallow及以上设备设置权限。插件也提供此功能。
Sample reference mentioning the same 即使提到了 ionic,在 cordova 项目中也需要使用相同的方法
要获得权限状态,请复制如下。
cordova.plugins.diagnostic.getPermissionAuthorizationStatus(function (status) {
console.log(status);
switch (status) {
case cordova.plugins.diagnostic.runtimePermissionStatus.GRANTED:
//call the target method
break;
case cordova.plugins.diagnostic.runtimePermissionStatus.NOT_REQUESTED:
setPermission();
break;
case cordova.plugins.diagnostic.runtimePermissionStatus.DENIED:
setPermission();
break;
case cordova.plugins.diagnostic.runtimePermissionStatus.DENIED_ALWAYS:
setPermission();
break;
}
}, this.errorCallback, cordova.plugins.diagnostic.runtimePermission.ACCESS_COARSE_LOCATION);
并请求授权
function setPermission() {
cordova.plugins.diagnostic.requestLocationAuthorization(function (status) {
switch (status) {
case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED:
break;
case cordova.plugins.diagnostic.permissionStatus.DENIED:
break;
case cordova.plugins.diagnostic.permissionStatus.GRANTED:
//TODO : Call native plugin.
break;
case cordova.plugins.diagnostic.permissionStatus.GRANTED_WHEN_IN_USE:
break;
}
}, function (error) { }, cordova.plugins.diagnostic.locationAuthorizationMode.ALWAYS);
}