Re: [desarrolladores-android.com] fallo en intent share

162 views
Skip to first unread message

Juan de Dios Maldonado Sánchez

unread,
Jan 6, 2013, 11:33:40 AM1/6/13
to desarrollad...@googlegroups.com
El fallo es que cualquier aplicación que selecciones para compartir el archivo no tiene acceso al mismo (por cuestión de permisos) y por eso no lo puede leer a la hora de enviarlo. 

Soluciones: 
- Créalo en la tarjeta de memoria
- Créalo utilizando MODE_WORLD_WRITABLE cuando utilizas la función openFileOutput
...


2013/1/6 David Rodriguez Gonzalez <davidr...@gmail.com>
Buenas tardes,
estoy intentando mandar un archivo .xls mediante un intent share:

File file=new File(getFilesDir(),"cuentas.xls");
new ExcelCreator(this,file).createXLS();     //metodo que rellena el archivo
Intent shareIntent=new Intent(Intent.ACTION_SEND);
shareIntent.setType("application/excel");
shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
startActivity(Intent.createChooser(shareIntent, "Compartir via:"));

si lo comparto por gmail se me abre la ventana de gmail y me señala que tengo el archivo adjuntado, pero a la hora de recibirlo me da el siguiente error: "no se ha podido mostrar el archivo adjunto".
si lo comparto por drive me da error de subida.

no se cual es el fallo, he mirado de todo y no hay manera. 

Muchas grácias.

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/AmNsS
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/-U4xXnIdTYkJ.
 
 

David Rodriguez Gonzalez

unread,
Jan 6, 2013, 12:33:38 PM1/6/13
to desarrollad...@googlegroups.com
Gracias por responder tan rápido, pero sigue sin funcionar, he cambiado el código a:

File file=new File(getFilesDir(),"cuentas.xls");
FileOutputStream fos=openFileOutput("cuentas.xml",Context.MODE_WORLD_WRITEABLE);
new ExcelCreator(this,fos).createXLS();   //método que rellena el archivo
Intent shareIntent=new Intent(Intent.ACTION_SEND);
shareIntent.setType("application/excel");
shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
startActivity(Intent.createChooser(shareIntent, "Compartir vía:"));

donde puede estar el fallo??? porque el archivo lo crea bien. 
y si en gmail me señala que lo tengo adjunto es porque el putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file)); tambien funciona ¿¿no???
pero porque despues no lo añade al e-mail, no me sale ni en enviados ni recividos.

Estoy perdidísimo, gracias.

Juan de Dios Maldonado Sánchez

unread,
Jan 6, 2013, 1:29:03 PM1/6/13
to desarrollad...@googlegroups.com
No tengo ni idea de cómo funciona el ExcelCreator, pero deberías de asegurarte que el archivo creado es accesible por cualquier aplicación. Utiliza el inspector de archivos del ADB para comprobar los permisos con los que se ha generado.

Que en Gmail te aparezca el nombre no tiene por qué ser que funcione, ya que el nombre viene incluido dentro del Uri. Luego como no tiene acceso, no puede acceder al mismo para enviarlo.


2013/1/6 David Rodriguez Gonzalez <davidr...@gmail.com>
Gracias por responder tan rápido, pero sigue sin funcionar, he cambiado el código a:

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/AmNsS
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/c5inbetXOk8J.
 
 

David Rodriguez Gonzalez

unread,
Jan 6, 2013, 2:11:15 PM1/6/13
to desarrollad...@googlegroups.com
en el archivo creado tengo permisos -rw-rw--w, por lo que debería poder acceder a el.

Juan de Dios Maldonado Sánchez

unread,
Jan 6, 2013, 2:19:10 PM1/6/13
to desarrollad...@googlegroups.com
Pues mira en el logcat haciendo todo el proceso. Seguro que aparece algún mensaje de error esclarecedor.

2013/1/6 David Rodriguez Gonzalez <davidr...@gmail.com>
asegurarte

David Rodriguez Gonzalez

unread,
Jan 6, 2013, 2:45:04 PM1/6/13
to desarrollad...@googlegroups.com
es que no me da ningun fallo, como te digo me "manda" al archivo aunque despues no llega

Juan de Dios Maldonado Sánchez

unread,
Jan 6, 2013, 2:56:35 PM1/6/13
to desarrollad...@googlegroups.com
Hazte una aplicación a parte que trate el ACTION_SEND y desde esa actividad ves qué es lo que anda mal... Porque si tú me dices que el archivo tiene todos los permisos, tendré que creerte.


2013/1/6 David Rodriguez Gonzalez <davidr...@gmail.com>
es que no me da ningun fallo, como te digo me "manda" al archivo aunque despues no llega

El domingo, 6 de enero de 2013 20:19:10 UTC+1, juande escribió:
Pues mira en el logcat haciendo todo el proceso. Seguro que aparece algún mensaje de error esclarecedor.

2013/1/6 David Rodriguez Gonzalez <davidr...@gmail.com>
asegurarte

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/AmNsS
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/bh10p_X3bpkJ.
 
 

David Rodriguez Gonzalez

unread,
Jan 6, 2013, 5:05:30 PM1/6/13
to desarrollad...@googlegroups.com
He separado el código como me has sugerido, y tengo el mismo problema, pego el código completo:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void share(View v) throws WriteException, IOException{
createXLS();
startActivity(Intent.createChooser((new Intent(Intent.ACTION_SEND).setType("application/excel")
.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(new File(getFilesDir(),"ejemplo.xls")))),"Compartir via:"));
}
public void createXLS() throws RowsExceededException,WriteException, IOException{
FileOutputStream file=openFileOutput("ejemplo.xls",Context.MODE_WORLD_WRITEABLE);
WorkbookSettings wbSettings=new WorkbookSettings();
wbSettings.setLocale(new Locale("es","ES"));
WritableWorkbook wb=Workbook.createWorkbook(file,wbSettings);
wb.createSheet("cuentas",0);
WritableSheet sheet=wb.getSheet(0);
WritableCellFormat times=new WritableCellFormat(new WritableFont(WritableFont.TIMES,20));
times.setWrap(true);
WritableCellFormat timesBoldUnderline=new WritableCellFormat(new WritableFont(WritableFont.TIMES,20,WritableFont.BOLD,false,UnderlineStyle.SINGLE));
timesBoldUnderline.setWrap(true);
sheet.addCell(new Label(0,0,"ID",timesBoldUnderline));
sheet.addCell(new Label(1,0,"Concepto",timesBoldUnderline));
sheet.addCell(new Label(2,0,"Fecha",timesBoldUnderline));
sheet.addCell(new Label(3,0,"Seccion",timesBoldUnderline));
sheet.addCell(new Label(4,0,"Importe",timesBoldUnderline));
wb.write();
wb.close();
file.close();
}

}

la libreria para crear el xls se llama jxl.jar

la captura que adjunto es para que veas los permisos del archivo creado a ver si están correctos.

Muchas gracias por la ayuda y el tiempo prestado, de verdad.

Captura de pantalla de 2013-01-06 23:03:06.png

Juan de Dios Maldonado Sánchez

unread,
Jan 6, 2013, 5:27:12 PM1/6/13
to desarrollad...@googlegroups.com
No he tenido que programar nunca eso que estás haciendo tú, pero es posible que hayamos pasado por alto que si para:

shareIntent.putExtra(Intent.EXTRA_STREAM, XXXXXXXXX);

En vez de poner en las XXXXXXXXXX:

Uri.fromFile(file)

Podrías poner:

Uri.fromFile(getFileStreamPath("ejemplo.xls");

A estas horas de la noche no atiendo a razones de ver qué "File" se obtendrá distinto usando el getFileStreamPath, a usar "new File(...)" o si será exactamente igual de cualquier forma. A estas horas tiendo a decir barbaridades.

Prueba eso a ver, ya que no es un gran cambio, y si no, una vez que has creado el Uri, intenta abrir el archivo utilizando ese Uri a ver si consigues abrirlo desde tu propia aplicación. (Aunque para ir a lo seguro sería hacerlo en una aplicación distinta que reciba la ación ACTION_SEND)

2013/1/6 David Rodriguez Gonzalez <davidr...@gmail.com>
getFilesDir

David Rodriguez Gonzalez

unread,
Jan 7, 2013, 3:45:45 AM1/7/13
to desarrollad...@googlegroups.com
he probado a crear el archivo en la SD y funciona perfectamente, por lo que el fallo debe ser relacionado con los permisos del archivo, ¿¿no??

de todas formas si a alguien se le ocurre la solución al problema, que lo postee.

Y Juande, muchas gracias de verdad. Un saludo y feliz año.

Juan de Dios Maldonado Sánchez

unread,
Jan 7, 2013, 3:56:03 AM1/7/13
to desarrollad...@googlegroups.com
Eso es lo que te estaba diciendo desde el primer mensaje ^_^. El programa que tiene que enviar el archivo no puede acceder al mismo por cuestión de permisos o porque su ruta no es correcta. :)
Pero bueno... la cosa era que tú mismo lo confirmaras.

¿intentaste lo de usar Uri.fromFile(getFileStreamPath("ejemplo.xls");?

Lo de la ruta incorrecta lo podrás saber si justo antes de llamar al intent para ofrecer las opciones de compartir, intentas abrir desde ahí el archivo "File" que has referenciado y que pasarás al intent. Si se abre y puedes leer el contenido, entonces es que la ruta es correcta y ya la única explicación son los permisos.

2013/1/7 David Rodriguez Gonzalez <davidr...@gmail.com>
¿no

David Rodriguez Gonzalez

unread,
Jan 7, 2013, 5:02:30 AM1/7/13
to desarrollad...@googlegroups.com
si, probe Uri.fromFile(getFileStreamPath("ejemplo.xls")); y tampoco funciona. 

El archivo se abre perfectamente, asi que es problema de permisos, que no se como solucionar. Pero bueno, para lo que lo necesito me va bien, ya lo mirare con más calma.

Reply all
Reply to author
Forward
0 new messages