在安卓系统中如何打开特定的短信

13

有没有一种方法可以使用特定的短信打开 Android 上的消息活动?

4个回答

9

threadId 应该是你想查看的短信/彩信线程的id

Intent defineIntent = new Intent(Intent.ACTION_VIEW); 
defineIntent.setData(Uri.parse("content://mms-sms/conversations/"+threadId));  
myActivity.startActivity(defineIntent);

这是我发现的最简单的方法


试着查看这里的findThreadIdFromAddress()方法:http://code.google.com/p/android-smspopup/source/browse/trunk/SMSPopup/src/net/everythingandroid/smspopup/SmsPopupUtils.java - pm_labs
请尝试使用此更新的链接:https://code.google.com/p/android-smspopup/source/browse/SMSPopup/src/main/java/net/everythingandroid/smspopup/util/SmsPopupUtils.java - pm_labs
1
这种方法在2016年的最新SDK中不起作用。 - Oleksii K.

4

试试这个

int req_thread_id;

Uri mSmsinboxQueryUri = Uri.parse("content://sms"));
Cursor cursor1 = getContentResolver().query(
                        mSmsinboxQueryUri,
                        new String[] { "_id", "thread_id", "address", "person", "date",
                                "body", "type" }, null, null, null);

startManagingCursor(cursor1);
if (cursor1.getCount() > 0)
{
while (cursor1.moveToNext())
{

int thread_id = cursor1.getInt(1);
String address; = cursor1.getString(cursor1
                            .getColumnIndex(columns[0]));
if("your desired no".equals(address)
 req_thread_id = thread_id;
}
}
Intent defineIntent = new Intent(Intent.ACTION_VIEW); 
defineIntent.setData(Uri.parse("content://mms-sms/conversations/"+req_thread_id));  
myActivity.startActivity(defineIntent);

2

我从消息应用程序的源代码中挖掘出了这个内容(311-315行),所以我相信它能够运行,但是我没有任何经验。

// threadId should be the id of the sms/mms thread you want to view
long threadId = 0; 
Intent i = new Intent("com.android.mms");
i.setData(
        Uri.withAppendedPath(
                i.getData(), Long.toString(threadId)
        )
);
i.setAction(Intent.ACTION_VIEW);

我认为“线程 ID”与“短信 ID”是不同的? 同一个人发送的不同短信(每个短信都有自己的 ID)可以具有相同的线程 ID。 - n179911

0

这段代码片段来自被接受的答案中的一个评论。在此为了后代记录将其发布。

public static long findThreadIdFromAddress(Context context, String address) {
    if (address == null)
        return 0;

    String THREAD_RECIPIENT_QUERY = "recipient";

    Uri.Builder uriBuilder = THREAD_ID_CONTENT_URI.buildUpon();
    uriBuilder.appendQueryParameter(THREAD_RECIPIENT_QUERY, address);

    long threadId = 0;

    Cursor cursor = null;
    try {

        cursor = context.getContentResolver().query(
                uriBuilder.build(),
                new String[] { Contacts._ID },
                null, null, null);

        if (cursor != null && cursor.moveToFirst()) {
            threadId = cursor.getLong(0);
        }
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
    return threadId;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接