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

我正在一个应用程序需要能够保存/创build一个新的彩信在收件箱或发送文件夹,但我不知道的方式。

我尝试了下面的代码,但它给了我例外:

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:通过删除行删除exception: values.put("body","body 3")但我看不到消息中的任何mms。

Solutions Collecting From Web of "在收件箱Android中保存/创build彩信"

我遇到了同样的问题。 不过,我成功地创build和恢复了一个彩信。 这基本上是对数据库的反向操作。 我希望你可以从数据库中获得彩信,对吗? 你只需要在数据库表中放回适当的值。 您可以在mmssms.db中获取有关数据库表的信息。 一旦你了解了mmssms.db,插入一个彩信是很容易的。

MMS的主体存储在content://mms/part/ 。 请参阅此代码以了解如何从中读取,但请记住,所有这些都是无证的,不受支持的,可能会在没有通知的情况下进行更改。

首先当你创build一个你想用作屏幕的屏幕。 然后在你完成之后,让它在代码中尝试将该MMS发送给你想要的其他人。 在这里你首先在你的项目中声明一个btn_emailbutton。

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

然后在这个button上写上onclickevent,这将能够帮助把mms发送给其他人。

发送彩信代码:

btn_email.setOnClickListener(new View.OnClickListener(){@Override public void onClick(View v){// TODO自动生成方法存根System.out.println(“电子邮件button被按下..”);

  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卡path的代码。 这个使用意图代码的代码是android默认的电子邮件发送屏幕将会使用的。

通过这种方式,您可以将MMS发送给其他人。

现在要保存那个你发送给其他人的那个微粒薄膜,当你开发你创build的那个屏幕时,你只是捕获整个屏幕…并保存在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(); } } 

这上面的代码将保存你发送的屏幕,然后只是你访问或从您的SD卡特定的path名​​称获取该图像