如何检查android

时间:2016-05-17 12:21:16

标签: android file file-upload

我正在android中创建一个聊天应用程序。当我上传文件时,我无法追踪文件来自何处。我需要检查它是来自外部SD卡还是内部存储器,以便我可以将文件路径添加到我的数据库Sqlite。

目前我正在使用以下功能执行此操作:

 public static boolean isExternalStorageDocument(Uri uri) {
    return "com.android.externalstorage.documents".equals(uri
            .getAuthority());
}

它在Kitkat中正确检查但在Lolipop工作。所以我能做的更多吗?

1 个答案:

答案 0 :(得分:0)

Uri可以指向任何

  • 外部存储设备上的本地文件
  • 其他应用的内部存储上的本地文件
  • 其他应用程序的可移动存储上的本地文件
  • 加密且需要动态解密的本地文件
  • 数据库中BLOB列中保存的字节流
  • 必须即时生成的文档,例如Stack Overflow如何动态生成此页面
  • 首先需要由其他应用下载的内容

缺乏经验的开发人员认为Uri仅指向文件。这从来都不是真的。随着开发人员开始避免使用the ban on the file scheme,您很少会在今年晚些时候看到Uri带有file计划的Uri。没有常识的人会尝试根据对Uri的检查来推导文件系统路径,因为无法保证这样的计划即使在有限的情况下也会起作用,并且它不会处理用户可以选择的大量内容源数组。

通过ACTION_OPEN_DOCUMENT获得的Uri可能支持可持久的takePersistableUriPermission()权限。如果是这样,您可以调用Uri并将Uri本身保存到您的数据库中。您仍然需要处理内容不再可用的情况(例如,用户将其删除)。

在所有其他情况下,仅在您的流程期间使用raining = df[df.rain ==1][['ENTRIESn_hourly']] #note that you do not have to specify the column again, #as you have already assigned it to the raining variable. raining.hist() 。如果您需要访问内容的时间超过该内容,请将该内容的副本复制到您控制的文件中(例如,在internal storage上)。