Chúng tôi đang cố gắng kết nối ứng dụng AndroidTV của mình để nối thêm kết quả vào tìm kiếm toàn cầu. Tôi đang chạy vào một vấn đề mà tôi không thể thực hiện một cuộc gọi api để có được kết quả bởi vì hệ thống gọi nhà cung cấp nội dung của tôi trên chủ đề chính.API cuộc gọi trong nhà cung cấp nội dung để tìm kiếm toàn cầu
@Override
public Cursor query(Uri uri, String[] projection, String search, String[] selectionArgs, String searchOrder) {
... Logic here that calls the API using RxJava/Retrofit
return cursor;
}
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/foo"
android:searchSettingsDescription="@string/foo_results"
android:includeInGlobalSearch="true"
android:searchSuggestAuthority="com.foo.search.provider"
android:searchSuggestIntentAction="android.intent.action.VIEW" />
<provider
android:authorities="com.foo.search.provider"
android:name=".search.GlobalSearchProvider"
android:exported="true"/>
Khi tôi thực hiện tìm kiếm toàn cầu, tôi có thể thấy truy vấn ContentProvider # được gọi. Nếu tôi cố gắng thực hiện cuộc gọi api trên luồng hiện tại, tôi sẽ nhận được một ngoại lệ về mạng.
Tôi đã cố gắng nhấn mạnh con trỏ mà dữ liệu đã thay đổi qua nhưng cũng không thành công.
getContext().getContentResolver().notifyChange(Uri.parse("content://com.foo.test"), null);
...
cursor.setNotificationUri(getContext().getContentResolver(), Uri.parse("content://com.foo.test"));
Có cách nào tôi có thể buộc O.S gọi nhà cung cấp nội dung trên một chuỗi riêng biệt hoặc ít nhất thông báo cho tìm kiếm rằng con trỏ có nội dung mới không?
cảm ơn
Bạn có thể xem câu trả lời dưới đây không? – Sebastiano
@dextor Tôi đoán bạn có thể thử thay đổi thứ tự trong đó searchableinfo của bạn xuất hiện trong danh sách SearchManager.getSearchablesInGlobalSearch(). Tôi nghĩ bạn có thể làm điều này bằng cách thay đổi tên của Hoạt động có thể tìm kiếm. Vì vậy, tìm kiếm ứng dụng của bạn sẽ được thực hiện cuối cùng bởi ứng dụng tìm kiếm, nhưng tôi không chắc liệu nó có hoạt động hay không. Hơn nữa, việc tạo một quy trình riêng biệt để truy vấn không chạy trên luồng chính, nếu bạn chỉ đặt chính sách lỏng lẻo, truy vấn sẽ vẫn chạy trong chuỗi chính và các hoạt động giao diện người dùng có thể bị trì hoãn hoặc bạn có thể nhận ANR – nandeesh
Kết quả tìm kiếm của tôi đã được hiển thị dưới dạng kết quả cuối cùng, vì vậy đó không phải là kết quả. Tôi biết rằng chạy trên một quá trình riêng biệt "giải quyết" vấn đề, nhưng những gì tôi đã nhận thấy là sự chậm trễ kết quả là cách cao hơn chạy trên cùng một quá trình. Và tôi không thể hiểu tại sao. – Sebastiano