2017-10-11 75 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"/> 

曲棍球应用是一个问题。