Cambio para Android 4.4+
Las aplicaciones son no permitido a escritura(borrar, modificar ...) a externa almacenamiento excepto a sus directorios específicas para dicho paquete.
Como estados de documentación Android:
"Aplicaciones no se debe permitir escribir en almacenamiento externo secundario dispositivos, excepto en sus directorios de paquete específico como lo permite la permisos sintetizados."
Sin embargo existe solución desagradable(ver código de abajo). Probado en Samsung Galaxy S4, pero esta solución no funciona en todos los dispositivos.También I no contaría con esta solución está disponible en futuras versiones de Android.
Hay un great article explaining (4.4+) external storage permissions change.
Puede leer more about workaround here. El código fuente de la solución temporal es de this site.
public class MediaFileFunctions
{
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static boolean deleteViaContentProvider(Context context, String fullname)
{
Uri uri=getFileUri(context,fullname);
if (uri==null)
{
return false;
}
try
{
ContentResolver resolver=context.getContentResolver();
// change type to image, otherwise nothing will be deleted
ContentValues contentValues = new ContentValues();
int media_type = 1;
contentValues.put("media_type", media_type);
resolver.update(uri, contentValues, null, null);
return resolver.delete(uri, null, null) > 0;
}
catch (Throwable e)
{
return false;
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private static Uri getFileUri(Context context, String fullname)
{
// Note: check outside this class whether the OS version is >= 11
Uri uri = null;
Cursor cursor = null;
ContentResolver contentResolver = null;
try
{
contentResolver=context.getContentResolver();
if (contentResolver == null)
return null;
uri=MediaStore.Files.getContentUri("external");
String[] projection = new String[2];
projection[0] = "_id";
projection[1] = "_data";
String selection = "_data = ? "; // this avoids SQL injection
String[] selectionParams = new String[1];
selectionParams[0] = fullname;
String sortOrder = "_id";
cursor=contentResolver.query(uri, projection, selection, selectionParams, sortOrder);
if (cursor!=null)
{
try
{
if (cursor.getCount() > 0) // file present!
{
cursor.moveToFirst();
int dataColumn=cursor.getColumnIndex("_data");
String s = cursor.getString(dataColumn);
if (!s.equals(fullname))
return null;
int idColumn = cursor.getColumnIndex("_id");
long id = cursor.getLong(idColumn);
uri= MediaStore.Files.getContentUri("external",id);
}
else // file isn't in the media database!
{
ContentValues contentValues=new ContentValues();
contentValues.put("_data",fullname);
uri = MediaStore.Files.getContentUri("external");
uri = contentResolver.insert(uri,contentValues);
}
}
catch (Throwable e)
{
uri = null;
}
finally
{
cursor.close();
}
}
}
catch (Throwable e)
{
uri=null;
}
return uri;
}
}
Es necesario proporcione más información sobre el problema, como qué idioma está utilizando, cómo está accediendo a la tarjeta SD, etc. – Amok
¿Está descargando los cambios en el disco? –
@Amuck Creo que es seguro asumir que está usando Java ya que no especificó. –