#android #mms
#Android #mms
Вопрос:
Я работаю над приложением, которое должно иметь возможность сохранять / создавать новые MMS в папках «Входящие» или «Отправленные», но я не могу понять, как это сделать.
Я попробовал следующий код, но он выдал мне исключение:
ContentValues values = new ContentValues();
values.put("address", "xxxxxxxxxxx");
values.put("body", "body 3");
values.put("read", "0");
getContentResolver().insert(Uri.parse("content://mms/inbox"), values);
И исключением является:
ERROR/Database(118): Error inserting read=0 body=body 3 msg_box=1 date=1306153444 address=xxxxxxxxxxx
ERROR/Database(118): android.database.sqlite.SQLiteException: table pdu has no column named body: , while compiling: INSERT INTO pdu(read, body, msg_box, date, address) VALUES(?, ?, ?, ?, ?);
ERROR/Database(118): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
ERROR/Database(118): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
ERROR/Database(118): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
ERROR/Database(118): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
ERROR/Database(118): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:36)
ERROR/Database(118): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145)
ERROR/Database(118): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
ERROR/Database(118): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
ERROR/Database(118): at com.android.providers.telephony.MmsProvider.insert(MmsProvider.java:347)
ERROR/Database(118): at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
ERROR/Database(118): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146)
ERROR/Database(118): at android.os.Binder.execTransact(Binder.java:288)
ERROR/Database(118): at dalvik.system.NativeStart.run(Native Method)
ERROR/MmsProvider(118): MmsProvider.insert: failed! read=0 body=body 3 msg_box=1 date=1306153444 address=xxxxxxxxxxx
UDPATE: Исключение удалено путем удаления строки: values.put("body","body 3")
Но я не вижу никаких mms в сообщениях.
Комментарии:
1. Исключение устранено путем удаления строки: values.put(«body», «body 3»); Но не вижу никаких mms в сообщениях. и что нужно сделать, чтобы вставить какую-либо картинку или видео????
2. Для отправки MMS через intent вы можете воспользоваться следующей ссылкой: androiddevcentral.com/source-code/137/send-an-MMS-via-Intents
3. Что ж, спасибо Kartik, но я хочу сохранить / создать в папке «Входящие» или «Отправленные». @Все, ребята, да ладно, ни одного ответа .. : (
4. Я где-то читал, что mms может быть связано с конкретным приложением… я предполагаю, что вам нужно установить какой-то идентификатор, чтобы поместить ваше sms в папку входящие, поскольку по умолчанию созданное вами sms-сообщение назначается вашему конкретному приложению и, следовательно, не будет отображаться в общей папке входящие mms. Если я найду конкретную информацию, я создам ответ. Надеюсь, это укажет вам правильное направление…
5. @Farhan, ты получил свой ответ? Я также ищу тот же ответ, но безуспешно: (
Ответ №1:
У меня была такая же проблема. Однако я успешно создал и восстановил MMS. По сути, это обратная манипуляция с базой данных. Я надеюсь, вы можете получить MMS из базы данных, верно? Вам просто нужно вернуть соответствующие значения в таблицы базы данных. Вы можете получить информацию о таблицах базы данных в mmssms.db. Как только вы разберетесь в mmssms.db, вставить MMS-сообщение будет очень просто.
Ответ №2:
Текст MMS хранится в content://mms/part/
. Смотрите Этот код о том, как читать из него, но помните, что все это недокументировано, не поддерживается и, вероятно, будет изменено без предварительного уведомления.
Ответ №3:
сначала вы создаете один экран, который хотите использовать в качестве экрана mms. затем, после того, как вы завершили это, попробуйте сделать это с помощью кода, чтобы отправить это mms другому человеку, которому вы хотите. здесь вы сначала объявляете одну кнопку btn_email в своем проекте.
btn_email = (кнопка)findViewById(R.id.btn_email);
затем напишите onclickevent на этой кнопке, которая сможет помочь отправить mms другому человеку.
отправить MMS-код:
btn_email.setOnClickListener (новый вид.OnClickListener() { @Переопределить общедоступную пустоту onClick(Просмотр v) { // Автоматически сгенерированный метод TODO заглушка System.out.println («кнопка электронной почты только что нажата ..»);
Intent sendIntent = new Intent(Intent.ACTION_SEND);
//Mime type of the attachment (or) u can use sendIntent.setType("*/*")
sendIntent.setType("image/jpeg");
//Subject for the message or Email
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "My Picture");
//Full Path to the attachment
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://mnt/" mUrl));
//Use a chooser to decide whether email or mms
startActivity(Intent.createChooser(sendIntent, "Email:"));
}
});
вот код, который отправит mms другому человеку с вашей SD-карты.
этот код, использующий код намерения, является экраном отправки электронной почты Android по умолчанию.
таким образом, вы сможете отправлять mms другому человеку.
теперь, чтобы сохранить те частичные mms, которые вы отправили другому человеку, когда вы разрабатываете созданный вами экран, вы просто захватываете весь этот экран…и сохранить на SD-карте, как..
например:
btn_save = (кнопка)findViewById(R.id.btn_save);
btn_save.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("the save button is just pressed..");
saveImageToSD();
Toast.makeText(Create_Screen_Birthday.this,"Image successfully saved",Toast.LENGTH_LONG).show();
}
});
защищенная пустота saveImageToSD() {
/ Автоматически сгенерированный заглушка метода TODO
System.out.println("NOW you are on the saveimage to sd card method called block..");
try
{
//String fileName = "myBitmapImage2.png";
int Current_Hour,Current_Minute,Current_Second;
RelativeLayout settext_relative;
settext_relative = (RelativeLayout)findViewById(R.id.settext_relative);
final Calendar c = Calendar.getInstance();
Current_Hour = c.get(Calendar.HOUR);
Current_Minute = c.get(Calendar.MINUTE);
Current_Second = c.get(Calendar.SECOND);
System.out.println("the value of Current_Year = " Current_Hour);
System.out.println("the value of Current_Month = " Current_Minute);
System.out.println("the value of Current_Date = " Current_Second);
fileName = "Birthday_Card" "_" Current_Hour "_" Current_Minute "_" Current_Second ".png";
String path = "/sdcard/E-card/Birthday_Cards/";
newfileName = path fileName;
System.out.println("the value of newfilename = " newfileName);
System.out.println("The Filename on save card on sdcard = " fileName);
FileOutputStream outStream = null;
File file = new File(path);
file.mkdirs();
File outputFile = new File(file, fileName);
outputFile.createNewFile();
outStream = new FileOutputStream(outputFile);
BufferedOutputStream bos = new BufferedOutputStream(outStream);
RL.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap( RL.getDrawingCache());
bitmap.compress(Bitmap.CompressFormat.PNG, 100,bos);
RL.setDrawingCacheEnabled(false);
bos.flush();
bos.close();
btn_preview.setVisibility(View.VISIBLE);
btn_save.setVisibility(View.GONE);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
приведенный выше код сохранит изображение экрана, которое вы отправили, затем вы просто получаете доступ к этому изображению или извлекаете его с определенного пути на вашей SD-карте
Комментарии:
1. Я думаю, вы не совсем поняли вопрос… Я хочу создать mms в папке «Входящие», должно быть что-то вроде: запустите некоторый код, после чего будет создана новая запись в папке сообщений по умолчанию с Inbox / Sent…..