2017-10-11 86 views
1

我有一個需要運行以下權限的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; 
} 

當一個應用程序啓動它會要求獲得訪問正確位置的權限。它確實要求許可錄製音頻。但是,它並未要求寫入外部存儲的權限。

我創建了一個小型演示應用程序。這段代碼似乎在那裏工作。 我錯過了什麼?

最終修改:刪除不相關的代碼。

+0

你爲什麼要求ACCESS_FINE_LOCATION權限兩次?正如它在Array中定義的那樣。 – Kuls

+2

[請求WRITE \ _EXTERNAL \ _STORAGE權限的正確方法]的可能重複(https://stackoverflow.com/questions/43385895/proper-way-of-requesting-write-external-storage-permission) – Tigger

+0

什麼是設置 requiredPermissions = GlasAI.instance()。requiredPermissions();從你得到該數組檢查,如果它包含寫入外部權限 – Pavan

回答

1

問題的原因必須是外部庫使用gradle這個有它自己的清單,要求這樣的事情

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"> 

所以在應用程序清單文件,你需要把權限這樣

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="replace" /> 

這將覆蓋另一個應用程序設置的權限。 Hokey在你的情況下

0

它的工作:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="replace"/> 

曲棍球應用是一個問題。