Sto lavorando a un'applicazione multimediale. Sto catturando un'immagine attraverso la fotocamera e voglio inviare quell'immagine con un testo ad un altro numero. Ma non ricevo come inviare l'immagine tramite l'MMS.Come inviare un'immagine tramite MMS in Android?
risposta
Questo sembra essere risolta nel post: Sending MMS with Android
linee fondamentali dell'essere codice:
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");
qualcosa da tenere a mente è l'immagine dovrebbe essere su storage esterno o come fornire contenuto. i dati delle app di solito interni non sono accessibili da altre app. quindi devi temporaneamente scrivere l'immagine sull'archivio esterno e quindi passare il percorso a 'Uri.parse' – Shubhank
questo non funziona più poiché scegliere l'attività del messaggio nel telefono fa sì che il messaggio contenga solo l'immagine, senza il testo – peresisUser
MMS è solo una richiesta htttp-post. Si dovrebbe eseguire la richiesta utilizzando funzione rete in più:
final ConnectivityManager connMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
final int result = connMgr.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS);
Se si ottiene risultato con valore Phone.APN_REQUEST_STARTED, bisogna aspettare per stato corretto. Registrati BroadCastReciver e attendere che venga visualizzato Phone.APN_ALREADY_ACTIVE:
final IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver(reciver, filter);
Se sfondo connessione è pronta, a costruire i contenuti ed eseguire richiesta. Se si vuole fare che utilizzando il codice interno di Android, si prega di utilizzare questo:
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 da MMS-APN, MMSProxy: delega da MMS-APN, Porta: porta da MMS-APN
Nota che alcune classi provengono da pacchetti interni. È necessario scaricare da Android Git.
La richiesta dovrebbe essere fatto con l'URL da APN-spazio dell'utente ... codice ..:
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;
}
Qualcuno può spiegare come ottenere correttamente tutti i codici di riferimento in Eclipse (ad es. la classe SendReq, ecc.)? Ho git e repo e ho la sorgente Android e ho il progetto MMS stesso impostato in Eclipse (l'ho trovato nell'SDK su/packages/apps/MMS).Tuttavia, fa riferimento a molte altre parti del sistema Android e non so come ottenere tutti quei riferimenti nel mio progetto in Eclipse senza copiare i file nella directory src del mio progetto e nelle sottodirectory appropriate a mano, il che è schiacciante. –
Molte di queste classi sembrano provenire dalle API google non pubbliche (cfr: applicazione Mms). Non penso che possano essere usati fuori dalla scatola. – ddewaele
questo codice richiama l'app MMS incorporata? – Vijaya
Se dovete inviare MMS con qualsiasi immagine utilizzando Intent quindi utilizzare questo codice.
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
Se dovete inviare MMS con Audio o Video file usando Intent quindi utilizzare questo.
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);
fammi sapere se questo ti aiuta.
Invoca l'applicazione di messaggistica nativa. Ma c'è un modo per inviare MMS all'interno della propria applicazione e registrarsi ascoltando i messaggi in arrivo ** MMS ** con un 'BroadcastReceiver' in modo simile a come questo è implementato per ** messaggi SMS **. – toobsco42
Trovo che funzioni correttamente con le immagini, ma non con audio/video (il tuo secondo esempio di codice). – dadude999
La risposta con l'helper APN non funzionerà dopo Android 4.0. Per ottenere le impostazioni apn di mms su Android 4.0 e sopra, visualizza questa risposta: View mms apn
Sto facendo qualcosa di simile QUI !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – toobsco42