Сохранить / Создать MMS в почтовом ящике Android - PullRequest
24 голосов
/ 23 мая 2011

Я работаю над приложением, которое должно иметь возможность сохранять / создавать новые 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") Но я не вижу ни одной ммсв сообщениях.

Ответы [ 3 ]

5 голосов
/ 09 августа 2011

У меня была такая же проблема.Однако я успешно создал и восстановил MMS.Это в основном обратное манипулирование базой данных.Я надеюсь, что вы можете получить MMS из базы данных, верно?Вам просто нужно вернуть соответствующие значения в таблицы базы данных.Вы можете получить информацию о таблицах базы данных в mmssms.db.Как только вы понимаете mmssms.db, очень легко вставить MMS.

2 голосов
/ 31 мая 2011

Тело MMS хранится в content://mms/part/.См. этот код для чтения из него, но помните, что все это недокументировано, не поддерживается и может быть изменено без уведомления.

0 голосов
/ 30 мая 2011

сначала при создании одного экрана, который вы хотите использовать в качестве экрана ммс.затем, после того как вы завершили, чтобы сделать это, попробуйте это в коде, чтобы отправить это MMS другому человеку, которому вы хотите.здесь вы сначала объявляете одну кнопку btn_email в вашем проекте.

btn_email = (Button) findViewById (R.id.btn_email);

, а затем пишите onclickevent для этой кнопки, которая поможет вамотправить MMS другому лицу.

отправить код MMS:

btn_email.setOnClickListener (new View.OnClickListener () {@Override public void onClick (View v) {// TODO автоматически сгенерированометод stub 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 другому лицу с вашего пути SDCard. этот код используетинтент-код - это экран отправки электронной почты по умолчанию для Android.

, таким образом, вы можете отправить MMS другому лицу.

теперь, чтобы сохранить те частицы, которые вы отправили,другой человек, когда вы разрабатываете тот экран, который вы создали, вы просто захватываете весь этот экран ... и сохраняете его на SD-карте, как ..

например:

btn_save = (Button) 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();    
    }

   });

protected void 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();
    }       

}

этот код, приведенный выше, сохранит тот экран, который вы отправили, тогда вы просто получите доступ или получитеэто изображение из вашего конкретного пути SDCard

...