2016-11-21 73 views
0

我的应用程序能够打开和处理某些文件。所以你可以在文件管理器中点击这样的文件,我的应用程序将提供打开它。清单文件中的intent过滤器是这样设置的。Android:删除文件导致内容uri

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 

    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 

    <data android:mimeType="text/plain" /> 
</intent-filter> 

读取和处理这样的文件工作正常:

Context.getContentResolver().openInputStream(getIntent().getData()); 

的问题是,我想它处理后删除该文件。 (如果用户选中了复选框)用户通常在我的应用程序打开后不再需要该文件。

目前我只能做到这一点,如果文件作为文件uri提供给我(以file://开头)。在这种情况下,该代码工作正常:

new File(contentUri.getPath()).delete(); 

但我不知道如何删除该文件,如果它是作为内容URI标识。 (从内容://)

例如,这将返回null,而什么都不做:

Context.getContentResolver().delete(getIntent().getData(), null, null); 
+0

你从哪里得到'Uri'? – CommonsWare

+0

看看DocumentFile :: deleteFile()。 – greenapps

+0

[可能通过'ContentResolver'删除文件,而不是通过'file.delete()']删除它们(http://stackoverflow.com/questions/10925196/deleting-files-via-a-contentresolver-as - 反对删除他们通过文件删除) –

回答

0

你必须删除这些内容没有可靠的方法。这不是你的内容,并且对于你所知道的,从技术上来说被删除在技术上是不可能的。删除它的责任在于调用您的ACTION_VIEW活动的应用程序,而不是您。

如果您希望能够删除内容,请反转该流程。在Android 4.4+上,您可以使用ACTION_OPEN_DOCUMENT来允许用户选择一段内容。然后,您收到的Uri可能允许您使用DocumentFile将其删除。

+0

您是否认为DocumentFile类提供了超过 Context.getContentResolver()。delete(getIntent()。getData(),null,null)的其他内容。 ? 看起来像一个供应商方面使用的类,而不是接收方。 (我已经看到应用程序以某种方式解决删除问题,删除了他们提供的文件,但我无法删除它们。) –

+0

@GáborDemkó:“您认为DocumentFile类提供了什么补充...” - 仅适用于'Uri通过存储访问框架(例如'ACTION_OPEN_DOCUMENT')派生而来。通过其他方式获得的'Uri',比如你的'',不需要用任何方法表示可以删除的东西。 – CommonsWare

+0

@CommonsWare,602k。你好吗?六天前601k。一周有一千点。我必须为此工作一年。它不仅可以通过我认为广泛的信息答案。富人变得更富有...... ;-)。 – greenapps