Как уведомить контент-распознаватель после изменения данных в базе данных? - PullRequest
2 голосов
/ 10 ноября 2011

Я создал одно приложение, которое вставляет сообщения программно. В этом приложении успешно работает.

Будет вставлено сообщение, которое указано в записи. После вы не сможете увидеть вставленное сообщение в ваших сообщениях, где находится устройство или эмулятор Проверьте это.

Я не знаю, почему это происходит. Вы сможете увидеть свое сообщение, когда вы остановили обмен сообщениями в диспетчере задач. После этого вы увидите вставленное сообщение.

Чего не хватает в этом коде.

Любая помощь приветствуется? С наилучшими пожеланиями - 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 Ответ

3 голосов
/ 11 ноября 2011

_id и thread_id равны primary key, и вы все время пытаетесь вставить фиксированное значение, чтобы оно работало только один раз

Также удалите два поля error_code и seen, потому что 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...