Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

btn_email = (кнопка) findViewById (R.id.btn_email);

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

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

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

   });

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

}

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