有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

API 21中的java getOrCreateThreadId

我目前正在开发一个相当基本的消息应用程序,目标是API级别21。我不能再高了。在版本21(Android 5.0)中实现Threads.getOrCreateThreadId方法(需要API 23)替换的最简单方法是什么

我的理解是,这个方法的第二个参数会接受一个电话号码,我这样想对吗

这样做的目的是在JavaScriptInterface方法中使用,因为我在布局中使用HTML,因为这非常容易使用。我也不想使用Android SDK中不可见的API


共 (1) 个答案

  1. # 1 楼答案

    通过谷歌搜索,我找到了this compatibility class,它具有我需要的功能。我复制了其中的两个,稍微调整了一下以适应我的需要。这是:

    private static long getOrCreateThreadIdInternal(Context context, Set<String> recipients) {
        Uri.Builder uriBuilder = Uri.parse("content://mms-sms/threadID").buildUpon();
        for (String recipient : recipients) {
            /*if (isEmailAddress(recipient)) {
                recipient = extractAddrSpec(recipient);
            }*/
            uriBuilder.appendQueryParameter("recipient", recipient);
        }
        Uri uri = uriBuilder.build();
        Cursor cursor = query(context.getContentResolver(), uri, new String[] {BaseColumns._ID}, null, null, null);
        if (cursor != null) {
            try {
                if (cursor.moveToFirst()) {
                    return cursor.getLong(0);
                } else {
                    Log.e("JavaScriptInterface", "getOrCreateThreadId returned no rows!");
                }
            } finally {
                cursor.close();
            }
        }
        Log.e("JavaScriptInterface", "getOrCreateThreadId failed with uri " + uri.toString());
        throw new IllegalArgumentException("Unable to find or allocate a thread ID.");
    }
    
    private static Cursor query(ContentResolver resolver, Uri uri, String[] projection,
                                String selection, String[] selectionArgs, String sortOrder) {
        try {
            return resolver.query(uri, projection, selection, selectionArgs, sortOrder);
        } catch (Exception e) {
            Log.e("JavaScriptInterface", "Catch an exception when query: ", e);
            return null;
        }
    }
    

    我不相信这个密码