Сохранение / создание MMS-сообщений во входящих сообщениях Android

#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…..