我有一個需要運行以下權限的android應用程序。Android:請求WRITE_EXTERNAL_STORAGE的對話框未顯示
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>
我飛濺的活動是:
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中定義的那樣。 – Kuls
[請求WRITE \ _EXTERNAL \ _STORAGE權限的正確方法]的可能重複(https://stackoverflow.com/questions/43385895/proper-way-of-requesting-write-external-storage-permission) – Tigger
什麼是設置 requiredPermissions = GlasAI.instance()。requiredPermissions();從你得到該數組檢查,如果它包含寫入外部權限 –
Pavan