代码之家  ›  专栏  ›  技术社区  ›  n179911

如何在android中打开特定的短信

  •  12
  • n179911  · 技术社区  · 15 年前

    有没有一种方法可以通过特定的短信在android上打开消息传递活动?

    4 回复  |  直到 14 年前
        1
  •  9
  •   Sergey Maksimenko tocsa    9 年前

    threadId

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

    这是我找到的最简单的方法

        2
  •  4
  •   Vibhuti    13 年前

    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);
    
        3
  •  2
  •   Jeremy Logan    15 年前

    我从消息应用程序的源代码中找到了这个( lines 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);
    
        4
  •  0
  •   pm_labs    10 年前

    此片段来自已接受答案中的注释。将此方法发布在此处供子孙后代使用。

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