java – 通过’ContentResolver’删除文件,而不是通过’file.del
我刚刚在
Android应用程序中编写了一个功能,它使用Java中的标准“File”类删除文件.即:
String fileName= "/mnt/Gallery/Img001.jpg"; File file = new File(fileName); file.delete(); 虽然上述过程很简单,但我一直在想,通过“ContentResolver”来做同样的事情有什么好处.任何建议将不胜感激. 干杯, Jarryd —————————————— EDIT ——- ——————————— 以下是通过Content Resolver删除文件的示例.此示例假定要删除的文件是一个图像,并且其’id’是已知的. long mediaId = 155; // NOTE: You would normally obtain this from the content provider! Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Uri itemUri = ContentUris.withAppendedId(contentUri,mediaId); int rows = getContentResolver().delete(itemUri,null,null); String path = itemUri.getEncodedPath(); if(rows == 0) { Log.e("Example Code:","Could not delete "+path+" :("); } else { Log.d("Example Code:","Deleted "+path+ " ^_^"); } 解决方法
与直接操作数据相比,Android的内容提供商框架具有一定的附加优势.
您可以考虑“文件所在的位置,谁可能正在删除它”. 情景1 文件位于SD卡(您的应用可访问的路径),您的应用正在删除它. 解决方案:由于您可以访问该路径,因此java方法将与文件Uri一起使用:
情景2 文件位于另一个应用程序(称为Dropbox)中,您的应用程序需要删除该文件. 解决方案:这意味着该文件实际上位于另一个应用程序的私人存储中.一个文件:Uri将上面的方法会给你访问被拒绝.所以,您的应用程序将需要从包含该文件的应用程序中获取内容Uri,并调用其内容提供商进行删除.
情景3 文件位于您的应用程序包目录中,即data / data / com.yourpackage / yourfolder / yourfile.xxx下,您的应用程序是唯一一个删除它. 解决方案:这里,上述两种方法都可以使用,因为您可以删除该文件.
在这里使用内容提供商的主要优点是您自动获得观察者模型.内容提供者回调是一个定义明确的入口点,从数据修改.因此,它是通过以下方式通知他人的一个理想的地方:
假设您有视图显示此类文件的列表.删除完成后,可以通知您. 情景4 文件位于您的应用程序包目录中,您要将删除功能公开于其他应用程序. 解决方案:这与场景1相似,只是相反.其他应用程序无法使用Uri删除私人存储中的文件
他们需要打电话给您的内容提供商这样做与Uri像.
概要 总而言之,内容提供者的使用是必要的,而在其他情况下是可选的.它在很大程度上取决于你的应用需求如果您有意见,CursorLoaders就位,想要了解更新,或希望将您的应用程序数据删除到其他应用程序,内容提供商是最干净的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |