package com.tws.plugin.servicemanager.compat; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.net.Uri; import android.os.Build; import android.os.Bundle; import com.tws.plugin.servicemanager.ServiceManager; import com.tws.plugin.servicemanager.util.RefIectUtil; /** * @author yongchen */ public class ContentProviderCompat { public static Bundle call(Uri uri, String method, String arg, Bundle extras) { ContentResolver resolver = ServiceManager.sApplication.getContentResolver(); if (Build.VERSION.SDK_INT >= 11) { return resolver.call(uri, method, arg, extras); } else { ContentProviderClient client = resolver.acquireContentProviderClient(uri); if (client == null) { throw new IllegalArgumentException("Unknown URI " + uri); } try { Object mContentProvider = RefIectUtil.getFieldObject(client, ContentProviderClient.class, "mContentProvider"); if (mContentProvider != null) { //public Bundle call(String method, String request, Bundle args) Object result = null; try { result = RefIectUtil.invokeMethod(mContentProvider, Class.forName("android.content.IContentProvider"), "call", new Class[]{String.class, String.class, Bundle.class}, new Object[]{method, arg, extras}); } catch (ClassNotFoundException e) { e.printStackTrace(); } return (Bundle) result; } } finally { client.release(); } return null; } } }