¿Cómo enviar imágenes a través de MMS en Android?

Estoy trabajando en una aplicación multimedia. Estoy capturando una imagen a través de la cámara y quiero enviar esa imagen con un texto a otro número. Pero no entiendo cómo enviar la imagen a través del MMS.

    MMS es solo una solicitud de htttp-post. Debe realizar la solicitud utilizando la función de red adicional :

    final ConnectivityManager connMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); final int result = connMgr.startUsingNetworkFeature( ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS); 

    Si obtiene un resultado con el valor Phone.APN_REQUEST_STARTED, debe esperar al estado correcto. Registre BroadCastReciver y espere hasta que Phone.APN_ALREADY_ACTIVE aparezca:

     final IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); context.registerReceiver(reciver, filter); 

    Si el fondo de la conexión está listo, crea contenido y realiza la solicitud. Si quieres hacer eso usando el código interno de Android, usa esto:

     final SendReq sendRequest = new SendReq(); final EncodedStringValue[] sub = EncodedStringValue.extract(subject); if (sub != null && sub.length > 0) { sendRequest.setSubject(sub[0]); } final EncodedStringValue[] phoneNumbers = EncodedStringValue .extract(recipient); if (phoneNumbers != null && phoneNumbers.length > 0) { sendRequest.addTo(phoneNumbers[0]); } final PduBody pduBody = new PduBody(); if (parts != null) { for (MMSPart part : parts) { final PduPart partPdu = new PduPart(); partPdu.setName(part.Name.getBytes()); partPdu.setContentType(part.MimeType.getBytes()); partPdu.setData(part.Data); pduBody.addPart(partPdu); } } sendRequest.setBody(pduBody); final PduComposer composer = new PduComposer(this.context, sendRequest); final byte[] bytesToSend = composer.make(); HttpUtils.httpConnection(context, 4444L, MMSCenterUrl, bytesToSendFromPDU, HttpUtils.HTTP_POST_METHOD, !TextUtils .isEmpty(MMSProxy), MMSProxy, port); 

    MMSCenterUrl: url de MMS-APN, MMSProxy: proxy de MMS-APN, puerto: puerto de MMS-APN

    Tenga en cuenta que algunas clases son de paquetes internos. Descargar desde Android GIT es obligatorio.

    La solicitud debe hacerse con la URL del código de apn del usuario … código ..:

     public class APNHelper { public class APN { public String MMSCenterUrl = ""; public String MMSPort = ""; public String MMSProxy = ""; } public APNHelper(final Context context) { this.context = context; } public List getMMSApns() { final Cursor apnCursor = this.context.getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null); if ( apnCursor == null ) { return Collections.EMPTY_LIST; } else { final List results = new ArrayList(); if ( apnCursor.moveToFirst() ) { do { final String type = apnCursor.getString(apnCursor.getColumnIndex(Telephony.Carriers.TYPE)); if ( !TextUtils.isEmpty(type) && ( type.equalsIgnoreCase(Phone.APN_TYPE_ALL) || type.equalsIgnoreCase(Phone.APN_TYPE_MMS) ) ) { final String mmsc = apnCursor.getString(apnCursor.getColumnIndex(Telephony.Carriers.MMSC)); final String mmsProxy = apnCursor.getString(apnCursor.getColumnIndex(Telephony.Carriers.MMSPROXY)); final String port = apnCursor.getString(apnCursor.getColumnIndex(Telephony.Carriers.MMSPORT)); final APN apn = new APN(); apn.MMSCenterUrl = mmsc; apn.MMSProxy = mmsProxy; apn.MMSPort = port; results.add(apn); } } while ( apnCursor.moveToNext() ); } apnCursor.close(); return results; } } private Context context; } 

    Esto parece ser respondido en la publicación: Envío de MMS con Android

    Las principales líneas de código son:

     Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra("sms_body", "some text"); sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(url)); sendIntent.setType("image/png"); 

    Si tiene que enviar MMS con cualquier imagen con intención, utilice este código.

     Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setClassName("com.android.mms", "com.android.mms.ui.ComposeMessageActivity"); sendIntent.putExtra("sms_body", "some text"); sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/image_4.png")); sendIntent.setType("image/png"); startActivity(sendIntent);; 

    O

    Si tiene que enviar MMS con un archivo de audio o video usando Intent, entonces use esto.

     Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setClassName("com.android.mms", "com.android.mms.ui.ComposeMessageActivity"); sendIntent.putExtra("address", "1213123123"); sendIntent.putExtra("sms_body", "if you are sending text"); final File file1 = new File(mFileName); if(file1.exists()){ System.out.println("file is exist"); } Uri uri = Uri.fromFile(file1); sendIntent.putExtra(Intent.EXTRA_STREAM, uri); sendIntent.setType("video/*"); startActivity(sendIntent); 

    avísame si esto te ayuda.

    La respuesta con el ayudante de APN no funcionará después de Android 4.0. Para obtener la configuración de mms apn en Android 4.0 y superior ver esta respuesta: Ver mms apn