相关疑难解决方法(0)

Android 6(M)权限问题(创建目录不起作用)

我有这个代码用于创建保存图片的目录:

        File storageDir = null;
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {                
            storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "myphoto");
            if (!storageDir.mkdirs()) {                    
                if (!storageDir.exists()){                       
                    Log.d("photo", "failed to create directory");
                    return null;
                }
            }
        }
        return storageDir;
Run Code Online (Sandbox Code Playgroud)

storeDir"/storage/emulated/0/Pictures/myphoto/"在android 6下面返回,在android 6上它返回null.

我有许可 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

buildToolVersion 23 targetSdkVersion 23

怎么修?

android android-camera android-6.0-marshmallow

14
推荐指数
2
解决办法
2万
查看次数

下载管理器Android权限错误:写入外部存储

我编写了一个Android应用程序,使用DownloadManager将示例PDF文件下载到下载目录.这是代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_vertretungsplan);
    Button dlbutton = (Button) findViewById(R.id.buttondownload);
    final Context c = this;
    dlbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(myurl));
            request.setTitle("Vertretungsplan");
            request.setDescription("wird heruntergeladen");
            request.allowScanningByMediaScanner();
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            String filename = URLUtil.guessFileName(myurl, null, MimeTypeMap.getFileExtensionFromUrl(myurl));
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
            DownloadManager manager = (DownloadManager) c.getSystemService(Context.DOWNLOAD_SERVICE);
            manager.enqueue(request);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

现在,我尝试在我的Xperia Z3 Android 6.0上从Android Studio调试运行它.当我点击下载按钮时,会发生以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.markwitt.schul_app, PID: 29297
              java.lang.SecurityException: No permission to write to /storage/emulated/0/Download/hrpsampletable.pdf: Neither user 10047 nor current …
Run Code Online (Sandbox Code Playgroud)

xml android android-manifest android-permissions android-download-manager

11
推荐指数
2
解决办法
1万
查看次数

为什么我需要在Android Lollipop上使用getExternalCacheDir()的WRITE_EXTERNAL_STORAGE权限?

我的应用程序将缓存文件写入(并读取)到getExternalCacheDir()位置.在Android Lollipop(API 21)之前,我一直在使用此权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
Run Code Online (Sandbox Code Playgroud)

maxSdkVersion存在,因为在API v18之后不应该需要此权限:http: //developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE

但是在Android Lollipop(5.0)上,我获得了这样的访问权限(使用我的日志输出来显示实际使用的路径):

11-19 13:01:59.257    4462-4541/com.murrayc.galaxyzoo.app E/android-galaxyzoo?     createCacheFile(): IOException for filename=/storage/emulated/0/Android/data/com.murrayc.galaxyzoo.app/cache/52
    java.io.IOException: open failed: EACCES (Permission denied)
            at java.io.File.createNewFile(File.java:941)
            at com.murrayc.galaxyzoo.app.provider.ItemsContentProvider.createCacheFile(ItemsContentProvider.java:528)
Run Code Online (Sandbox Code Playgroud)

我在模拟器和我的Nexus 4中看到了这一点.有什么变化,或者我一直在做错什么?我只是想访问我自己的应用程序的缓存.

更新:我现在只在我的设备上看到这一点(运行标准Android 5.1.1的Nexus 4,自从我第一次遇到这个问题以来,它甚至有了新的Android重新刷新).我不再在模拟器中看到这一点 - 当然系统图像已经多次更新.

android android-file android-permissions

9
推荐指数
1
解决办法
8769
查看次数

在运行时授予WRITE_EXTERNAL_STORAGE权限时,应用程序无法访问SD卡

android M 中访问sdcard必须在运行时授予权限时强制停止并启动app,如何以编程方式实现?

但是,如果应用程序强制停止并重新启动,则可以访问sdcard.

AndroidManifest.xml:

uses-permission-sdk-m android:name="android.permission.WRITE_EXTERNAL_STORAGE


     /* **Checking permission **
        if doesn't have request
         else
         browse file directory       
    */

    String[] perm = { Manifest.permission.WRITE_EXTERNAL_STORAGE };
    if (checkSelfPermission(perm[0]) == PackageManager.PERMISSION_DENIED) {


                    requestPermissions(perm, REQ);

                } else {

                    Explore(); //method to browse file directory
                }
Run Code Online (Sandbox Code Playgroud)

onRequestPermissionsResult

   @Override
public void onRequestPermissionsResult(int requestCode,
        String[] permissions, int[] grantResults) {
    // TODO Auto-generated method stub

    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {  

   //Not able to browse SD card until restart application


       Explore(); //method to browse file directory …
Run Code Online (Sandbox Code Playgroud)

android android-permissions android-6.0-marshmallow

2
推荐指数
1
解决办法
2688
查看次数