6

出于某种原因,Android 上的任何短信应用程序似乎都提供了将短信标记为未读的非常基本的功能(即使是旧的哑手机也有)。

我正在考虑自己编写这样一个应用程序,但在开始之前,我想知道一点关于如何做到这一点以及为什么以前没有这样做过。当然这不是不可能的吗?

4

3 回答 3

2

注意:首先,只是为了让您知道在 Android 中使用消息系统(2.3 或更低版本)中的消息系统并不典型,因为使用诸如 SMS 之类的东西需要使用官方不可用的内容提供者进行查询,而且 Android 家伙也有警告过它。您可以在以下 URL 中查看它: http ://android-developers.blogspot.in/2010/05/be-careful-with-content-providers.html

进一步为您的解决方案,只是为了每个人的关注,我想根据 Android 操作系统版本划分我的解释:

- 版本 2.3 或更低版本: 是的,应用程序在Pankaj Kumar的指导下制作起来非常简单,并且适用于上述 Android 操作系统版本及更低版本。

- 4.0 及以上版本: 应用程序将失败且无法工作。是的,正如 Android Dev Guys 所警告的那样,从这个版本及更高版本开始,您将无法阅读我尝试过的消息内容,因此您的应用程序将无法在即将发布的 Android 版本上运行。您只能获取它们的编号,例如:收件箱、已发送、发件箱失败等……但您无法修改或阅读内容。

- 版本 > 3.0 & < 4.0: 从未测试和尝试过。

希望这些信息对您有所帮助并节省您走死胡同的时间:)))

于 2012-06-19T12:30:05.010 回答
1

干得好

SMS 数据库具有以下列

06-19 17:41:19.723: V/vipul(25223): _id
06-19 17:41:19.723: V/vipul(25223): thread_id
06-19 17:41:19.723: V/vipul(25223): address
06-19 17:41:19.723: V/vipul(25223): person
06-19 17:41:19.723: V/vipul(25223): date
06-19 17:41:19.723: V/vipul(25223): protocol
06-19 17:41:19.723: V/vipul(25223): read
06-19 17:41:19.723: V/vipul(25223): status
06-19 17:41:19.723: V/vipul(25223): type
06-19 17:41:19.723: V/vipul(25223): reply_path_present
06-19 17:41:19.723: V/vipul(25223): subject
06-19 17:41:19.723: V/vipul(25223): body
06-19 17:41:19.723: V/vipul(25223): service_center
06-19 17:41:19.723: V/vipul(25223): locked
06-19 17:41:19.723: V/vipul(25223): error_code
06-19 17:41:19.723: V/vipul(25223): seen
06-19 17:41:19.723: V/vipul(25223): deletable
06-19 17:41:19.723: V/vipul(25223): hidden
06-19 17:41:19.723: V/vipul(25223): group_id
06-19 17:41:19.723: V/vipul(25223): group_type
06-19 17:41:19.723: V/vipul(25223): delivery_date
06-19 17:41:19.723: V/vipul(25223): date_sent

下面的代码段将所有 SMS 标记为未读,您可以将其更改为匹配 id 并仅使该 SMS 未读

package org.vipul;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class SMSSampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Uri uri = Uri.parse("content://sms/inbox");
        Cursor cursor = managedQuery(uri, null, null, null, null);

        for (int i = 0; i < cursor.getColumnCount(); i++) {
            Log.i("vipul", cursor.getColumnName(i));
        }

        if (cursor.moveToFirst()) {
            do {

                String id = cursor.getString(0);

                ContentValues contentValues = new ContentValues();
                contentValues.put("read", false);
                getContentResolver().update(uri, contentValues, "_id=?",
                        new String[] { id });
                contentValues.clear();
            } while (cursor.moveToNext());

        }
    }
}

最后在清单中添加android.permission.READ_SMSansandroid.permission.WRITE_SMS

于 2012-06-19T12:16:41.897 回答
0

有一个名为“标记为未读”的应用程序,由 Christian Asbjørn Skogsberg 发布(检查它)所以我想这是可能的。

于 2012-06-19T11:37:27.820 回答