在Android收件箱中保存/创建彩信

在Android收件箱中保存/创建彩信,android,mms,Android,Mms,我正在开发一个应用程序,该应用程序需要能够在收件箱或已发送文件夹中保存/创建新的彩信,但我不知道该方法 我尝试了以下代码,但出现异常: ContentValues values = new ContentValues(); values.put("address", "xxxxxxxxxxx"); values.put("body", "body 3"); values.put("read", "0"); getContentResolver().insert(Uri.parse("conten

我正在开发一个应用程序,该应用程序需要能够在收件箱或已发送文件夹中保存/创建新的彩信,但我不知道该方法

我尝试了以下代码,但出现异常:

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
ERROR/Database(118):插入read=0 body=body=3 msg_box=1 date=1306153444 address=xxxxxxxxxx时出错
错误/数据库(118):android.Database.sqlite.SQLiteException:表pdu没有名为body:的列,编译时:插入pdu(读取、正文、消息框、日期、地址)值(?,,,,?);
错误/数据库(118):位于android.Database.sqlite.SQLiteCompiledSql.native\u compile(本机方法)
错误/数据库(118):位于android.Database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
错误/数据库(118):位于android.Database.sqlite.SQLiteCompiledSql。(SQLiteCompiledSql.java:64)
错误/数据库(118):位于android.Database.sqlite.SQLiteProgram.(SQLiteProgram.java:80)
错误/数据库(118):位于android.Database.sqlite.SQLiteStatement.(SQLiteStatement.java:36)
错误/数据库(118):位于android.Database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145)
错误/数据库(118):位于android.Database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
错误/数据库(118):位于android.Database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
错误/数据库(118):位于com.android.providers.telephony.MmsProvider.insert(MmsProvider.java:347)
错误/数据库(118):位于android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
错误/数据库(118):位于android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146)
错误/数据库(118):位于android.os.Binder.execTransact(Binder.java:288)
错误/数据库(118):位于dalvik.system.NativeStart.run(本机方法)
错误/MmsProvider(118):MmsProvider.insert:失败!读取=0正文=正文3消息框=1日期=1306153444地址=XXXXXXXXXX

UDPATE:通过删除以下行删除异常:
values.put(“body”,“body 3”)
,但我在消息中看不到任何彩信。

首先创建一个要用作彩信屏幕的屏幕。 然后,当您完成后,请尝试将此代码下的彩信发送给您想要的其他人。 在这里,您首先在项目上声明一个btn_电子邮件按钮

btn_email=(按钮)findviewbyd(R.id.btn_email)

然后在此按钮上写入OnClick事件,它将有助于向其他人发送彩信

发送彩信代码:

btn_email.setOnClickListener(新视图.OnClickListener() { @凌驾 公共void onClick(视图v){ //TODO自动生成的方法存根 System.out.println(“电子邮件按钮刚刚按下…”)

以下是将彩信从SD卡路径发送给其他人的代码。 此代码使用的是android默认电子邮件发送屏幕将使用的意图代码

通过这种方式,您可以向其他人发送彩信

现在,要保存您发送给另一个人的彩信,在开发您创建的屏幕时,只需捕获整个屏幕…并保存在sd卡中,如

e、 g:

btn_save=(按钮)findviewbyd(R.id.btn_save)

受保护的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();
    }       

}

上述代码将保存您发送的屏幕,然后您只需从SD卡特定路径名访问或获取该图像即可。彩信正文存储在
content://mms/part/
。有关如何阅读,请参阅,但请记住,所有这些都是未记录的、不受支持的,并且可能会在未经通知的情况下更改

我也遇到了同样的问题。但是我成功地创建并还原了一个MMS。这基本上是对数据库的反向操作。我希望你能从数据库中获得一个MMS,对吧?你只需要在数据库表中放回适当的值。你可以在mmssms.db中获得有关数据库表的信息。一旦你理解了mmssms.db,插入彩信非常容易。

通过删除行:values.put(“body”、“body 3”)删除异常;但在邮件中看不到任何彩信。如何插入任何图片或视频???要通过intent发送彩信,您可以使用以下链接:thanx Kartik,但我想在我的收件箱或“已发送”文件夹中保存/创建。@All,伙计们,来吧,没有一个答案..:(我在某个地方读到,彩信可能与特定的应用程序相关……我想你需要设置某种id将你的短信放入收件箱文件夹,因为默认情况下,你创建的短信分配给特定的应用程序,因此不会显示在整个彩信收件箱中。如果我找到具体信息,我会创建一个答案。希望如此给你指出了正确的方向…@Farhan,你得到你的答案了吗?我也在寻找同样的答案,没有任何运气:(我想你没有完全理解这个问题…我想在收件箱中创建一个彩信,应该是这样的:运行一些代码,然后在默认邮件文件夹中创建一个新条目,其中包含inbox/Sent…)。。。。。
   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();    
    }

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

}