Отправить MMS на Android - PullRequest
       18

Отправить MMS на Android

0 голосов
/ 18 октября 2018

Я хочу отправить MMS, но похоже, что Намерение не будет работать должным образом, и я не могу отформатировать pdu SmsManager.
Это не работает - изображение можно хорошо просматривать на растровом изображении, но я не могу 'т создать пду.Как получить PDU, правильно отформатированный для SmsManager.sendMultimediaMessage?Документация, которую я нашел, имеет тенденцию быть очень старой.Я не могу найти простой способ проверить, правильно ли я сделал PDU.Помощь в использовании этого была бы полезна.

@TargetApi(Build.VERSION_CODES.N)
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
protected void sendText(String message, byte[] image, String phoneNo, MmsMessage myMessage){

// sending message passthrough to text
     sendText(message, phoneNo);

Я могу получить фотографию из сообщения, это работает.

    SavePhotoTask saveToFile = new SavePhotoTask();

    SmsManager smsManager = SmsManager.getDefault();
    String path = saveToFile.doInBackground(image);
    Uri uri = Uri.parse("file://"+ path);

Это была моя попытка использовать https://github.com/Xlythe/AndroidTextManager Это не вызывало и не отправляло ммс.

//TextManager manager = TextManager.getInstance(context);

// manager.send(message).to(phoneNo);

Это была моя попытка использовать намерение.Он просто помещает сообщение в текстовую область сообщений Android, но не отправляет его.это также не прикрепляет изображение.Я предполагаю, что это для внутренней передачи сообщений:

//        Intent i = new Intent(Intent.ACTION_VIEW);
//        i.putExtra("address",phoneNo);
//        i.putExtra("sms_body",message);
//        i.putExtra(Intent.EXTRA_STREAM,uri );
//        i.setType("vnd.android-dir/mms-sms");
//        main.startActivity(i);

Это была моя попытка создать pdu и отправить его через SmsManager.sendMultimediaMessage.Это не отправили.Я не могу найти журналы, чтобы сказать мне, почему он не отправил.Я предполагаю, что PDU был неправильно отформатирован.Кроме того, я не смог найти все детали для HttpUtils.httpConnection.

   // final ConnectivityManager connMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    //final int result = connMgr.get( ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS);
//        String subject = "hi there!";
//        String recipient = phoneNo;
//        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]);
//        }
//        ArrayList<PduPart> parts = myMessage.getPduParts();
//        final PduBody pduBody = new PduBody();

//            for(PduPart part : parts){
////                final PduPart partPdu = new PduPart();
////                partPdu.setName("image".getBytes());
////                partPdu.setContentType("image/png".getBytes());
////                partPdu.setData(image);
//                pduBody.addPart(part);
//            }
   // }

//        sendRequest.setBody(pduBody);
//    final PduComposer composer = new PduComposer(this.context, sendRequest);
//    final byte[] bytesToSend = composer.make();

//        smsManager.sendDataMessage(phoneNo,null,(short)2948,bytesToSend,null, null);
//        smsManager.sendMultimediaMessage(context,uri,null,null,null);
//
//    HttpUtils.httpConnection(context, 4444L, MMSCenterUrl,
//    bytesToSendFromPDU, HttpUtils.HTTP_POST_METHOD, !TextUtils
//            .isEmpty(MMSProxy), MMSProxy, port);

// Send a text based SMS
    //smsManager.sendMultimediaMessage();
 //SendReq request = new SendReq();
//        smsManager.sendDataMessage(phoneNo, null, port, smsBody, null, null);

}

И вот как я получил свои части для pdu:

private ArrayList<PduPart> getPartOfMMS(String mmsID) {
    String selectionPart = "mid=" + mmsID;
    Uri uri = Uri.parse("content://mms/part");
    Cursor cursor = context.getContentResolver().query(uri, null,
            selectionPart, null, null);
    ArrayList<PduPart> parts = new ArrayList<PduPart>();

    try {
        if (cursor.moveToFirst()) {
            do {

                PduPart tempPart= new PduPart();


                tempPart.setData(cursor.getBlob(cursor.getColumnIndex(Telephony.Mms.Part._DATA)));
                tempPart.setName(cursor.getString(cursor.getColumnIndex(Telephony.Mms.Part.NAME)).getBytes());
                //tempPart.setContentId(cursor.getBlob(cursor.getColumnIndex(Telephony.Mms.Part.CONTENT_ID)));
                tempPart.setContentType(cursor.getString(cursor.getColumnIndex(Telephony.Mms.Part.CONTENT_TYPE)).getBytes());
                //tempPart.setContentDisposition(cursor.getBlob(cursor.getColumnIndex(Telephony.Mms.Part.CONTENT_DISPOSITION)));
                //tempPart.setContentLocation(cursor.getBlob(cursor.getColumnIndex(Telephony.Mms.Part.CONTENT_LOCATION)));
                //tempPart.setCharset(cursor.getInt(cursor.getColumnIndex(Telephony.Mms.Part.CHARSET)));
                parts.add(tempPart);
            } while (cursor.moveToNext());
        }
        return null;
    } finally {
        cursor.close();
    }

}

Это для получения идентификаторовдля частей.Это работает, и я могу сохранить изображение от части изображения:

 @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public MmsMessage getLastMmsId(){
   int id = getLastMmsIds(1).get(0);

    //byte[] part = getPartOfMMS(id);
   MmsMessage message = getMmsText(id);

    return message;
}
public List<Integer> getLastMmsIds(int count){
    String selection = "";
    String[] selectionArgs = new  String[]{""};
    // new String[]{"_id", "thread_id", "date","address", "body"}

    String[] projection =  new String[] {"_id", "date", "msg_box", "read", "sub", "thread_id"};

    Cursor cursor = getContentResolver().query(Telephony.Mms.Inbox.CONTENT_URI,
                   projection, null, null, "date DESC LIMIT "+ count);
    Long threadId = -1L;
    if(cursor == null){
        return null;
    }
    ArrayList<Integer> ids = new ArrayList<Integer>();
    while (cursor.moveToNext())
    {
        int key = cursor.getInt (cursor.getColumnIndexOrThrow ("_id"));
        threadId = cursor.getLong (cursor.getColumnIndexOrThrow ("thread_id"));
        String read = cursor.getString (cursor.getColumnIndexOrThrow ("read")); // phone #
        long date = cursor.getLong (cursor.getColumnIndexOrThrow ("date"));
        String sub = cursor.getString (cursor.getColumnIndexOrThrow ("sub"));
        String body = cursor.getString (cursor.getColumnIndexOrThrow ("msg_box"));

        String q = String.format ("%04d %04d %10s %s %s",
                key, threadId, read,
                DateUtils.formatDateTime(context,date*1000,0),
                body == null ? "" : body.substring (0,Math.min(10,body.length()-1)));
        Log.d ("robert", q); // simple wrapper for Log.d()
        ids.add(key);
    }

    cursor.close();
    return ids;
}
...