android - Sdcard 内容在 DDMS 文件资源管理器 Android 6.0 中不可见

标签 android eclipse android-sdcard ddms

Android 6.0 改变了管理 sdcard 挂载的方式,这导致显示不正确。

在 5.x 之前,我们可以通过层次结构下的 DDMS Perspective (Eclipse) 访问 SDCard 内容

/mnt/shell/...

现在根据Documentation

/sdcard/

我在 DDMS 下看不到这个目录的任何内容,但在 PC 或其他应用程序(如 Astro)中。

我应该在 Eclipse(DDMS) 中设置什么才能看到该内容?

最佳答案

从 Android 6.0 开始,第三方应用无法查看 SDCard 内容。

In Android 6.0, third-party apps don’t have access to the sdcard_r and sdcard_rw GIDs. Instead, access is controlled by mounting only the appropriate runtime view in place for that app. Cross-user interactions are blocked using the everybody GID.

https://source.android.com/devices/storage/

作为附加信息,Android 6.0 引入了 Adoptable Storage Runtime Permissions 对与设备存储的交互施加限制。

希望对你有帮助。

更新

关于如何从 DDMS 访问文件到 Android 6.0。不允许执行此操作。如果您需要从您的应用程序访问文件,您可以使用此源代码示例:

   @Override
   protected void onCreate(Bundle savedInstanceState) {

        mPermissions = new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE };
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
           boolean isAllow = ContextCompat.checkSelfPermission(this, mPermissions[0]) == PackageManager.PERMISSION_GRANTED;
           if (!isAllow) {
              if (shouldShowRequestPermissionRationale(mPermissions[0])) {
                 // There is you need to display confirmation dialog about why you need to get this permission. 
                 if (confirm("You need to copy database to  device's storage") == YES) {
                     requestPermissions(mPermissions, REQUEST_CODE_ASK_PERMISSIONS)   
                  } else {
                     // User does not agree with your requirements
                     // You should decide how the app will work in this case.
                     message("You can't use this app!");
                     finish();
                  }
                  return;
              }
              requestPermissions(mPermissions, REQUEST_CODE_ASK_PERMISSIONS);
           }

        } else {
          runTheApp();
        }
   }

 @Override
 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            switch (requestCode) {
                case REQUEST_CODE_ASK_PERMISSIONS:
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                            runTheApp();
                        } else {
                            message("You can't use this app!")
                        }
                    }
                break;
                case REJECT_CODE_PERMISSIONS:
                    break;
                default:
                    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
    }

关于android - Sdcard 内容在 DDMS 文件资源管理器 Android 6.0 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33254072/

相关文章:

Android 使用设备艺术生成器进行屏幕截图

javascript - Phonegap/Cordova 推送通知不唤醒屏幕

java - : "Win32 refresh daemon" 期间发生内部错误

Android - 询问写入 SD 卡权限对话框

android - 在 Android 中使用 OPEN_READWRITE 访问权限在 SD 卡上打开 SQLiteDatabase 数据库

java - 将 java 和 nodejs 结合用于 android 应用程序

android - 如何在android中创建视频预览?

java - Eclipse 无法编译成 bin,无法找到或加载主类

java 应用程序不适用于 java9 和 eclipse

android - 如何从 Android 的 SD 卡中读取文本文件?