que las imagenes guarden guardar guarda galeria fotos evitar desactivar como autoguardado android image android-intent return-value whatsapp

las - no guardar fotos whatsapp android 2018



Devolviendo una imagen a whatsapp (1)

Después de buscar por días, aquí hay una solución de trabajo para devolver imágenes a todas las demás aplicaciones (probadas para GMail y WhatsApp).

Primero, debe establecer un filtro de intención en su AndroidManifest.xml ( aplicación interna> actividad ). Esto mostrará su aplicación cuando otras aplicaciones pidan esta intención (como cuando solicita una imagen). Nota : WhatsApp está usando la acción. PICK - intento. Agregar todos los filtros de intenciones a continuación, aunque proporcionará una gran compatibilidad con otras aplicaciones.

<intent-filter> <action android:name="android.intent.action.PICK" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.OPENABLE" /> <data android:mimeType="image/*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.OPENABLE" /> <data android:mimeType="image/*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.OPENABLE" /> <data android:mimeType="image/*" /> </intent-filter>

Lo segundo que debe cuidar es responder a un intento de inactividad. Esto debe constar de dos partes: Primero debe verificar si su aplicación se ha ejecutado para devolver una imagen o si se ejecuta por sí misma.

Intent intent = getIntent(); if (intent!=null && intent.getType()!=null) //check if any application has executed your app { if(intent.getType().indexOf("image/") != -1) isinint=true; //check if the requested type is an image. If true, set a public static boolean, f.e. named isinint to true. Default is false. }

Ahora, cuando el usuario ha elegido una imagen, establezca el resultado de la siguiente manera. Debido a problemas de memoria, debe copiar el archivo que desea devolver a la tarjeta SD y devolver el Uri.

if(isinint) //check if any app cares for the result { Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND, Uri.fromFile(openprev)); //Create a new intent. First parameter means that you want to send the file. The second parameter is the URI pointing to a file on the sd card. (openprev has the datatype File) ((Activity) context).setResult(Activity.RESULT_OK, shareIntent); //set the file/intent as result ((Activity) context).finish(); //close your application and get back to the requesting application like GMail and WhatsApp return; //do not execute code below, not important }

¡Nota! : Puede omitir el ((Activity) context) al llamar los datos en OnCreate o en los vacíos similares. Como utilizo este fragmento en otro vacío, debo proporcionar un contexto en cualquier caso que deba definirse como se muestra.

He intentado crear una aplicación que se muestra como una fuente de imagen opcional cuando un usuario intenta compartir una imagen con WhatsApp. Hasta ahora he logrado que mi aplicación aparezca en el selector de servicios que lanza whatsapp usando filtros de intención, pero no puedo obtener la imagen para que regrese correctamente a WhatsApp. Estoy publicando mi código a continuación:

public void returnImage(View v){ //Bitmap img; //Bundle selectedImage = new Bundle(); Uri imageURI; Intent shareIntent = new Intent(); switch(v.getId()){ case R.id.eric1 : imageURI = saveToCache(R.drawable.cartman1); shareIntent.putExtra(Intent.EXTRA_STREAM, imageURI); shareIntent.setType("image/png"); setResult(RESULT_OK, shareIntent); Utils.makeToast("Selected",this); System.out.println("--------------------------------"); System.out.println(imageURI.toString()); finish(); } } private Uri saveToCache(int resID) { // TODO Auto-generated method stub Bitmap image = BitmapFactory.decodeResource(getResources(), resID); File imageFile; Date d = new Date(); String imgName = ((Long.toString(d.getTime())).subSequence(1, 9)).toString(); String state = Environment.getExternalStorageState(); printDebug(state); if (Environment.MEDIA_MOUNTED.equals(state)) { File file = getExternalFilesDir(null); if (file != null) { try { //String root = file.getAbsolutePath(); imageFile = new File(file, imgName+".png"); printDebug(imageFile.getAbsolutePath()); FileOutputStream stream = new FileOutputStream(imageFile); boolean complete = image.compress(Bitmap.CompressFormat.PNG, 100, stream); if (!complete) { Log.d("tag", "image not saved"); } Log.d("tag", "image saved"); // Tell the media scanner about the new file so that it is // immediately available to the user. MediaScannerConnection.scanFile(this, new String[] { imageFile.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); return Uri.parse(imageFile.getAbsolutePath()); } catch (IOException e) { Log.d("tag", "Can''t save image", e); } } } return null; }

La aplicación se abre y selecciono la imagen pero whatsapp informa que la imagen no se puede compartir. LogCat no muestra errores ni advertencias.

Leí el recurso Intent-Filter para Whatsapp -> compartir imagen

pero no se menciona cómo o qué devolvió la aplicación, así que estoy completamente perdido aquí.