【发布时间】:2018-03-22 16:05:59
【问题描述】:
我有一个需要以下权限才能运行的 android 应用程序。
ACCESS_FINE_LOCATION, ACCESS_WIFI_STATE, WRITE_EXTERNAL_STORAGE, RECORD_AUDIO
我的 AndroidManifest.xml 是:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.volkswagenits.passengerapp">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
<application
...
</manifest>
我的 Splash 活动是:
public class SplashActivity extends Activity {
private static final String TAG = SplashActivity.class.getSimpleName();
private static int SPLASH_TIME_OUT = 10000;
private final int REQ_SOLVE_SERVICES_CODE = 15005;
private int REQ_PERM_CODE = 1010;
public static AudioInput AUDIO_INPUT;
private static final String[] requiredPermissions = new String[] { ACCESS_FINE_LOCATION, ACCESS_WIFI_STATE, WRITE_EXTERNAL_STORAGE, RECORD_AUDIO};
private void requestPermissionIfNeeded() {
boolean allGranted = allPermissionsGranted(this, requiredPermissions);
if (!allGranted) {
ActivityCompat.requestPermissions(this,
requiredPermissions, REQ_PERM_CODE);
} else {
//If all permissions are granted, check that PlayServices are available
checkPlayServices();
}
}
private void initializeGlass() {
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQ_PERM_CODE) {
boolean allGranted = true;
for (int result : grantResults) {
if (result == PackageManager.PERMISSION_DENIED) {
allGranted = false;
break;
}
}
if (!allGranted) {
} else {
//If all permissions are granted, check that PlayServices are available
checkPlayServices();
}
}
}
private void checkPlayServices() {
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
if (status != ConnectionResult.SUCCESS) {
if (GoogleApiAvailability.getInstance().isUserResolvableError(status)) {
GoogleApiAvailability.getInstance().getErrorDialog(this, status, REQ_SOLVE_SERVICES_CODE).show();
} else {
Toast.makeText(this, "Bus Sewa can not run without GoolgeServices.", Toast.LENGTH_SHORT).show();
finish();
}
} else {
bootGlasAndContinue();
}
}
}
授予所有权限的代码:
public static boolean allPermissionsGranted(Context context, String[] permissions) {
for (String perm : permissions) {
if (ContextCompat.checkSelfPermission(context, perm) == PackageManager.PERMISSION_DENIED) {
return false;
}
}
return true;
}
当应用程序启动时,它会请求访问精细位置的权限。它确实要求允许录制音频。但是,它不会请求写入外部存储的权限。
我创建了一个小型演示应用程序。这段代码似乎在那里工作。 我错过了什么?
最终编辑:删除了不相关的代码。
【问题讨论】:
-
为什么要两次请求 ACCESS_FINE_LOCATION 权限?正如它在 Array 中定义的那样。
-
什么是设置
requiredPermissions = GlasAI.instance().requiredPermissions();从您获取该数组的位置检查它是否包含写入外部权限 -
@KulsDroid 我已将其删除。修改了代码。
-
@Pavan 查看编辑后的代码。是的,GlasAI.instance().requiredPermissions() 确实有 WRITE_EXTERNAL_STORAGE。无论如何,即使是硬编码也不起作用
标签: android android-permissions