How to send image via MMS in Android?

后端 未结 4 1841
深忆病人
深忆病人 2020-11-22 04:36

I am working on a multimedia application. I am capturing one image through the camera and want to send that image with a text to some other number. But I am not getting how

相关标签:
4条回答
  • 2020-11-22 05:11

    MMS is just a htttp-post request. You should perform the request using extra network feature :

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

    If you get result with Phone.APN_REQUEST_STARTED value, you have to wait for proper state. Register BroadCastReciver and wait until Phone.APN_ALREADY_ACTIVE appears:

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

    If connection background is ready, build content and perform request. If you want to do that using android's internal code, please use this:

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

    Note that some classes are from internal packages. Download from android git is required.

    The request should be done with url from user's apn-space...code..:

    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;
    
    }
    
    0 讨论(0)
  • 2020-11-22 05:15

    The answer with the APN helper will not work after android 4.0. To get mms apn settings on Android 4.0 and above view this answer: View mms apn

    0 讨论(0)
  • 2020-11-22 05:18

    This seems to be answered in the post: Sending MMS with Android

    Key lines of code being:

    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"); 
    
    0 讨论(0)
  • 2020-11-22 05:19

    If you have to send MMS with any Image using Intent then use this 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

    If you have to send MMS with Audio or Video file using Intent then use this.

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

    let me know if this help you.

    0 讨论(0)
提交回复
热议问题