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

标签 android sms background-process

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

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

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

该代码中缺少什么。

有什么帮助吗?最好的问候 - SPK

代码

Activity :

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

最佳答案

_idthread_id主键,并且您一直尝试插入固定值,因此它只能工作一次

同时删除两个字段error_codeseen,因为短信表中没有任何列

您还必须在 list 中添加以下权限

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

关于android - 数据库中的数据更改后如何通知内容解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8079670/

相关文章:

android - onNext 和 onComplete 的行为

android - 我怎样才能让我的标签变小?

android - 使用 ViewPager 跨多个 TextViews/Fragments 拆分文本

android - Android Gradle Read超时

Android broadcastreceiver 创建新实例

swift - 无法将类型 'Data' 的值转换为指定类型 'Data'

c# - 通过 GSM 调制解调器使用 AT 命令在 C# 中发送 Unicode 消息(例如波斯语和阿拉伯语)

android - 应用程序打开为 "background process"。有可能 react native 吗?

Python后台shell脚本通信

iPhone VOIP 在后台