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