如何在数据库中更改数据后通知内容解析器?

时间:2011-11-10 12:41:46

标签: android sms background-process

我创建了一个以编程方式插入消息的应用程序。在该应用程序中成功运行。

它会插入记录中给出的任何消息。之后,您将无法在设备或模拟器的消息中看到插入的消息。看看那个。

我不知道为什么会这样。当您在任务管理器中停止发送消息时,您将能够看到您的消息。之后,您可以看到插入的消息。

该代码中缺少什么。

任何帮助表示赞赏?最诚挚的问候 - SPK

代码

的活动:

public class SMS extends Activity 
{
    Button btnSendSMS;
    EditText txtPhoneNo;
    EditText txtMessage;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        
        btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
        final insert i = new insert(this);
        btnSendSMS.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v) 
            {
                i.method_inser();
                Toast.makeText(getApplicationContext(), "Inserted", Toast.LENGTH_SHORT).show();             
            }
        });
    } 
}

类插入:

public class insert
{
    Context ctx,context;
    ContentResolver cr;

    public insert(Context context)
    {
        this.context = context;
        cr = context.getContentResolver();
    }
    public void method_inser()
    {
        Uri smsuri = Uri.parse("content://sms/");
        ContentValues iv = new ContentValues();
        String[] final_result = {"1","1","15555215556","3","1320753694842","0","1","-1","1","0","null","Gingerbread","null","0","0","1"};
        iv.put("_id", final_result[0]);
        iv.put("thread_id", final_result[1]);
        iv.put("address", final_result[2]);
        iv.put("person", final_result[3]);
        iv.put("date", final_result[4]);
        iv.put("protocol", final_result[5]);
        iv.put("read", final_result[6]);
        iv.put("status", final_result[7]);
        iv.put("type", final_result[8]);
        iv.put("reply_path_present", final_result[9]);
        iv.put("subject", final_result[10]);
        iv.put("body", final_result[11]);
        iv.put("service_center", final_result[12]);
        iv.put("locked", final_result[13]);
        iv.put("error_code", final_result[14]);
        iv.put("seen", final_result[15]);
        cr.insert(smsuri, iv);
    }
}

1 个答案:

答案 0 :(得分:3)

_idthread_idprimary key,您正在尝试一直插入修正值,因此它只能运行一次

同时删除两个字段error_codeseen,因为there are no any column in a sms table

此外,您还必须在清单

中添加以下权限
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS">

在收件箱中插入新邮件后,您必须使用内容解析程序通知已更改

使用此代码通知更改

Uri uri = cr.insert(smsuri, iv);
cr.notifyChange(uri, null);