在DDMS文件资源管理器Android 6.0中看不到SD卡内容

时间:2015-10-21 08:09:48

标签: android eclipse android-sdcard ddms

Android 6.0已经改变了管理sdcard-mount的方式,但不能让它显示正确。

在5.x之前,我们可以通过层次结构

下的DDMS Perspective(Eclipse)访问SDCard内容
  

的/ mnt /壳/...

现在根据Documentation

  

/ SD卡/

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

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

1 个答案:

答案 0 :(得分:1)

启动Android 6.0后,第三方应用无法查看SDCard内容。

  

在Android 6.0中,第三方应用无法访问sdcard_r和   sdcard_rw GID。而是通过仅安装来控制访问   适合该应用程序的适当运行时视图。跨用户   使用每个人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);
            }
    }