web-dev-qa-db-fra.com

Comment envoyer une image via MMS dans Android?

Je travaille sur une application multimédia. Je capture une image via l'appareil photo et je souhaite envoyer cette image avec un texte à un autre numéro. Mais je ne sais pas comment envoyer l'image via le MMS.

45
Sanjay

MMS n'est qu'une requête htttp-post. Vous devez effectuer la demande en utilisant fonctionnalité réseau supplémentaire:

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

Si vous obtenez un résultat avec la valeur Phone.APN_REQUEST_STARTED, vous devez attendre l'état correct. Enregistrez BroadCastReciver et attendez que Phone.APN_ALREADY_ACTIVE s'affiche:

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

Si l'arrière-plan de la connexion est prêt, créez le contenu et effectuez la demande. Si vous souhaitez le faire en utilisant le code interne d'Android, veuillez utiliser ceci:

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-APNs, MMSProxy: proxy de MMS-APNs, port: port de MMS-APNs

Notez que certaines classes proviennent de packages internes. Téléchargez depuis Android git est requis.

La demande doit être faite avec l'url du code apn-space ... de l'utilisateur ..:

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<APN> 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<APN> results = new ArrayList<APN>(); 
            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;

}
39

Si vous devez envoyer MMS avec n'importe quelle image en utilisant Intent, utilisez ce code.

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);;

OR

Si vous devez envoyer MMS avec audio ou vidéo fichier en utilisant Intent, utilisez-le.

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);

faites-moi savoir si cela vous aide.

9
swiftBoy

Cela semble être répondu dans le message: Envoi MMS avec Android

Les lignes de code clés étant:

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"); 
9
aioobe

La réponse avec l'aide APN ne fonctionnera pas après Android 4.0. Pour obtenir les paramètres apn mms sur Android 4.0 et versions supérieures, affichez cette réponse: Afficher mms apn

1
Sam Adamsh