2016-11-21 2 views
0

Mon application est capable d'ouvrir et de traiter certains fichiers. Ainsi, vous pouvez taper sur un tel fichier par exemple dans un gestionnaire de fichiers, et mon application sera offerte pour l'ouvrir. Le filtre d'intention dans le fichier manifeste est configuré de la sorte.Android: supprimer le fichier trought un contenu 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> 

lecture et le traitement du dossier comme celui-ci fonctionne très bien:

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

La question est, que je veux supprimer le fichier après son traitement. (Si l'utilisateur coche une case à cocher pour cela) Les utilisateurs n'ont généralement plus besoin du fichier après l'avoir ouvert avec mon application.

Actuellement, je ne peux le faire que si le fichier est fourni en tant que fichier uri (en commençant par le fichier: //). Dans ce cas, ce code fonctionne très bien:

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

Mais je ne sais pas comment supprimer le fichier s'il est fourni en uri de contenu. (En commençant par le contenu: //)

Par exemple retourne la valeur null, et ne fait rien:

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

D'où obtenez-vous le 'Uri'? – CommonsWare

+0

Jetez un coup d'œil à DocumentFile :: deleteFile(). – greenapps

+0

Copie possible de [Suppression de fichiers via un 'ContentResolver' par opposition à leur suppression via 'file.delete()'] (http://stackoverflow.com/questions/10925196/deleting-files-via-a-contentresolver-as -opposed-to-deleting-them-via-file-del) –

Répondre

0

Vous avez aucun moyen fiable de supprimer ce contenu. Ce n'est pas votre contenu, et pour autant que vous le sachiez, il n'est techniquement pas possible de supprimer à. La responsabilité de la suppression réside dans l'application qui a appelé votre activité ACTION_VIEW, pas vous.

Si vous souhaitez pouvoir supprimer le contenu, inversez le flux. Sur Android 4.4+, vous pouvez utiliser ACTION_OPEN_DOCUMENT pour permettre à l'utilisateur de choisir un élément de contenu. Ensuite, le Uri que vous obtenez peut vous permettre de le supprimer en utilisant DocumentFile.

+0

Pensez-vous que la classe DocumentFile fournit un ajout sur Context.getContentResolver(). Delete (getIntent(). GetData(), null, null); ? On dirait une classe à utiliser du côté des fournisseurs, pas sur les récepteurs. (J'ai vu des applications résolvant la suppression d'une façon ou d'une autre, supprimant les fichiers que je n'avais pas pu fournir.) –

+0

@ GáborDemkó: "Pensez-vous que la classe DocumentFile fournit une addition ..." - seulement pour un Uri 'dérivé à travers le cadre d'accès au stockage (par exemple,' ACTION_OPEN_DOCUMENT'). Un 'Uri' que vous obtenez par d'autres moyens, tels que votre ', n'a pas besoin de représenter quelque chose qui puisse être supprimé, par n'importe quel moyen. – CommonsWare

+0

@CommonsWare, 602k. Comment faites-vous ça? Il y a six jours 601k. Un millier de points dans une semaine. Je dois travailler pour ça une année.Il ne peut pas être seulement par des réponses informatives approfondies, je pense. Les riches deviennent plus riches ... ;-). – greenapps