2010-06-04 12 views
43

मैं एक मल्टीमीडिया एप्लिकेशन पर काम कर रहा हूं। मैं कैमरे के माध्यम से एक छवि कैप्चर कर रहा हूं और उस छवि को किसी अन्य नंबर पर टेक्स्ट के साथ भेजना चाहता हूं। लेकिन मुझे एमएमएस के माध्यम से छवि भेजने का तरीका नहीं मिल रहा है।एंड्रॉइड में एमएमएस के माध्यम से छवि कैसे भेजें?

+0

मैं यहां कुछ ऐसा कर रहा हूं !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – toobsco42

उत्तर

9

इस पोस्ट में जवाब दिया जा रहा है: Sending MMS with Android

कोड होने के प्रमुख लाइनों:

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"); 
+2

कुछ ध्यान में रखना है कि छवि बाह्य भंडारण या सामग्री प्रदान करने के रूप में होनी चाहिए। आम तौर पर आंतरिक ऐप्स डेटा को अन्य ऐप्स द्वारा एक्सेस नहीं किया जा सकता है। इसलिए आपको अस्थायी रूप से बाहरी संग्रहण में छवि लिखनी है और फिर 'Uri.parse' – Shubhank

+0

पर पथ पारित करना है, यह अब काम नहीं करता है क्योंकि फोन में संदेश गतिविधि चुनने से संदेश में केवल – peresisUser

39

एमएमएस सिर्फ एक htttp पोस्ट अनुरोध है। आप अनुरोध अतिरिक्त नेटवर्क सुविधा का उपयोग कर प्रदर्शन करना चाहिए: आप Phone.APN_REQUEST_STARTED मूल्य के साथ परिणाम हो, तो

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

, तो आप उचित राज्य के लिए इंतजार करना पड़ता है। BroadCastReciver रजिस्टर और जब तक Phone.APN_ALREADY_ACTIVE प्रकट होता है इंतजार:

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

तो कनेक्शन पृष्ठभूमि के लिए तैयार है, सामग्री का निर्माण और अनुरोध करते हैं। आप एंड्रॉयड के आंतरिक कोड का उपयोग कर कि क्या करना चाहते हैं, तो इस का उपयोग करें:

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: एमएमएस-APN के बंदरगाह से प्रॉक्सी: एमएमएस-APN के, MMSProxy से यूआरएल एमएमएस-APN के से बंदरगाह

नोट कि कुछ वर्ग आंतरिक पैकेज से हैं। एंड्रॉइड गिट से डाउनलोड की आवश्यकता है।

अनुरोध उपयोगकर्ता के APN-अंतरिक्ष से यूआरएल ... कोड के साथ किया जाना चाहिए ..:

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; 

} 
+5

पाठ के बिना चित्र होता है ग्रहण में सभी संदर्भित कोड को सही तरीके से कैसे प्राप्त करें (उदाहरण के लिए SendReq क्लास, आदि) को समझाएं? मेरे पास गिट और रेपो है और एंड्रॉइड स्रोत है और एमएमएस परियोजना स्वयं ग्रहण में स्थापित है (मैंने इसे एसडीके में/पैकेज/एप्स/एमएमएस पर पाया)।हालांकि, यह एंड्रॉइड सिस्टम के कई अन्य हिस्सों का संदर्भ देता है, और मुझे नहीं पता कि ग्रहण में मेरी परियोजना में उन सभी संदर्भों को कैसे प्राप्त किया जाए, बिना किसी परियोजना के स्रोत निर्देशिका में फ़ाइलों की प्रतिलिपि बनाने और हाथ से उचित उपनिर्देशिकाएं, जो भारी है। –

+1

इनमें से बहुत से वर्ग गैर-सार्वजनिक Google एपीआई (सीएफआर: एमएमएस आवेदन) से आते हैं। मुझे नहीं लगता कि उन्हें बॉक्स से बाहर इस्तेमाल किया जा सकता है। – ddewaele

+0

क्या यह कोड इनबिल्ट एमएमएस ऐप को आमंत्रित करता है? – Vijaya

9

आप करना है, तो किसी भी छवि आशय का उपयोग कर तो इस कोड का उपयोग के साथ MMS भेजें।

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

या

यदि आपके पास को आशय का उपयोग कर फ़ाइल तो इस का उपयोग ऑडियो या वीडियो में MMS भेजें।

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

अगर यह आपकी मदद करता है तो मुझे बताएं।

+3

यह देशी संदेश एप्लिकेशन को आमंत्रित करता है। लेकिन क्या एमएमएस को अपने आवेदन के भीतर भेजने का कोई तरीका है और आने वाले ** एमएमएस ** संदेशों को 'ब्रॉडकास्ट रिसीवर' के साथ सुनकर पंजीकरण करना है, यह कैसे ** एसएमएस ** संदेशों के लिए लागू किया गया है। – toobsco42

+0

मुझे यह छवियों के साथ ठीक से काम करने के लिए लगता है, लेकिन ऑडियो/वीडियो नहीं (आपका दूसरा कोड उदाहरण)। – dadude999

1

एपीएन सहायक के साथ उत्तर एंड्रॉइड 4.0 के बाद काम नहीं करेगा। एंड्रॉइड 4.0 पर एमएमएस एपीएन सेटिंग्स प्राप्त करने के लिए और ऊपर इस उत्तर को देखें: View mms apn

संबंधित मुद्दे