Я хочу отправить 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;
}