类android.content.ContentProvider源码实例Demo

下面列出了怎么用android.content.ContentProvider的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: AndroidComponentPlugin   文件: ActivityThread.java
private ProviderClientRecord installProviderAuthoritiesLocked(IContentProvider provider,
        ContentProvider localProvider,IActivityManager.ContentProviderHolder holder) {
    String names[] = PATTERN_SEMICOLON.split(holder.info.authority);
    ProviderClientRecord pcr = new ProviderClientRecord(names, provider,
            localProvider, holder);
    for (int i = 0; i < names.length; i++) {
        ProviderClientRecord existing = mProviderMap.get(names[i]);
        if (existing != null) {
            Slog.w(TAG, "Content provider " + pcr.mHolder.info.name
                    + " already published as " + names[i]);
        } else {
            mProviderMap.put(names[i], pcr);
        }
    }
    return pcr;
}
 
源代码2 项目: android_9.0.0_r45   文件: GrantedUriPermissions.java
private static GrantedUriPermissions grantUri(IActivityManager am, Uri uri,
        int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag,
        GrantedUriPermissions curPerms) {
    try {
        int sourceUserId = ContentProvider.getUserIdFromUri(uri,
                UserHandle.getUserId(sourceUid));
        uri = ContentProvider.getUriWithoutUserId(uri);
        if (curPerms == null) {
            curPerms = new GrantedUriPermissions(am, grantFlags, sourceUid, tag);
        }
        am.grantUriPermissionFromOwner(curPerms.mPermissionOwner, sourceUid, targetPackage,
                uri, grantFlags, sourceUserId, targetUserId);
        curPerms.mUris.add(uri);
    } catch (RemoteException e) {
        Slog.e("JobScheduler", "AM dead");
    }
    return curPerms;
}
 
源代码3 项目: android_9.0.0_r45   文件: ClipboardService.java
private final void checkUriOwnerLocked(Uri uri, int sourceUid) {
    if (uri == null || !ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) return;

    final long ident = Binder.clearCallingIdentity();
    try {
        // This will throw SecurityException if caller can't grant
        mAm.checkGrantUriPermission(sourceUid, null,
                ContentProvider.getUriWithoutUserId(uri),
                Intent.FLAG_GRANT_READ_URI_PERMISSION,
                ContentProvider.getUserIdFromUri(uri, UserHandle.getUserId(sourceUid)));
    } catch (RemoteException ignored) {
        // Ignored because we're in same process
    } finally {
        Binder.restoreCallingIdentity(ident);
    }
}
 
源代码4 项目: Spork   文件: DefaultContextResolver.java
@Override
@Nullable
public Context resolveContext(Object object) throws Exception {
	if (object instanceof View) {
		return ((View) object).getContext();
	} else if (object instanceof Fragment) {
		return ((Fragment) object).getActivity();
	} else if (object instanceof Context) {
		return (Context) object;
	} else if (object instanceof ContentProvider) {
		return ((ContentProvider) object).getContext();
	} else if (object instanceof ContextProvider) {
		return ((ContextProvider) object).getContext();
	} else if (object instanceof ViewProvider) {
		return ((ViewProvider) object).getView().getContext();
	} else {
		return null;
	}
}
 
public void grantSliceAccess(String pkg, int userId, String providerPkg, int providerUser,
        Uri uri) {
    PkgUser pkgUser = new PkgUser(pkg, userId);
    PkgUser providerPkgUser = new PkgUser(providerPkg, providerUser);

    SliceClientPermissions client = getClient(pkgUser);
    client.grantUri(uri, providerPkgUser);

    SliceProviderPermissions provider = getProvider(providerPkgUser);
    provider.getOrCreateAuthority(ContentProvider.getUriWithoutUserId(uri).getAuthority())
            .addPkg(pkgUser);
}
 
private String getAuthority(Context context, Class<? extends ContentProvider> providerClass) {
    PackageManager manager = context.getApplicationContext().getPackageManager();
    try {
        ProviderInfo providerInfo = manager.getProviderInfo(
                new ComponentName(context, providerClass), PackageManager.GET_META_DATA);
        return providerInfo.authority;
    } catch (PackageManager.NameNotFoundException e) {
        throw new IllegalStateException(e);
    }
}
 
源代码7 项目: Neptune   文件: ContentProviderProxy1.java
@Override
public Bundle call(@NonNull String method, String arg, Bundle extras) {
    if (extras == null || TextUtils.isEmpty(extras.getString(IntentConstant.EXTRA_WRAPPER_URI_KEY))) {
        return null;
    }
    Uri uri = Uri.parse(extras.getString(IntentConstant.EXTRA_WRAPPER_URI_KEY));
    ContentProvider provider = getContentProvider(uri);
    if (provider != null) {
        return provider.call(method, arg, extras);
    }
    return null;
}
 
源代码8 项目: springreplugin   文件: PluginPitProviderBase.java
@Override
@TargetApi(16)
public Cursor query(Uri uri, String[] projection,
                    String selection, String[] selectionArgs, String sortOrder,
                    CancellationSignal cancellationSignal) {
    PluginProviderHelper.PluginUri pu = mHelper.toPluginUri(uri);
    if (pu == null) {
        return null;
    }
    ContentProvider cp = mHelper.getProvider(pu);
    if (cp == null) {
        return null;
    }
    return cp.query(pu.transferredUri, projection, selection, selectionArgs, sortOrder, cancellationSignal);
}
 
源代码9 项目: Neptune   文件: PluginLoadedApk.java
/**
 * 安装插件的Provider
 */
private void installContentProviders() {
    if (!isSupportProvider()) {
        PluginDebugLog.runtimeLog(TAG, "Not support provider for plugin " + mPluginPackageName);
        return;
    }

    mPluginContentResolver = new PluginContentResolver(mHostContext);
    Map<String, PluginPackageInfo.ProviderIntentInfo> mProviderIntentInfos =
            mPluginPackageInfo.getProviderIntentInfos();
    if (mProviderIntentInfos != null) {
        Set<Map.Entry<String, PluginPackageInfo.ProviderIntentInfo>> mEntries =
                mProviderIntentInfos.entrySet();
        for (Map.Entry<String, PluginPackageInfo.ProviderIntentInfo> mEntry : mEntries) {
            PluginPackageInfo.ProviderIntentInfo mProviderInfo = mEntry.getValue();
            if (mProviderInfo != null) {
                try {
                    ContentProvider provider = ContentProvider.class.cast(mPluginClassLoader.
                            loadClass(mProviderInfo.mInfo.name).newInstance());
                    if (provider != null) {
                        // 调用attachInfo方法
                        provider.attachInfo(mPluginAppContext, mProviderInfo.mInfo);
                        mProviderMaps.put(mProviderInfo.mInfo.authority, provider);
                    }
                } catch (Exception e) {
                    ErrorUtil.throwErrorIfNeed(e);
                }
            }
        }
    }
}
 
源代码10 项目: ACDD   文件: ProviderProxy.java
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
    ContentProvider mContentProvider = getContentProvider();
    if (mContentProvider != null) {
        return mContentProvider.insert(uri, contentValues);
    }
    return null;
}
 
源代码11 项目: Ollie   文件: OllieTest.java
@Before
public void initialize() {
	ContentProvider contentProvider = new OllieSampleProvider();
	contentProvider.onCreate();

	ShadowLog.stream = System.out;
	ShadowContentResolver.registerProvider("com.example.ollie", contentProvider);

	Ollie.with(Robolectric.application)
			.setName("OllieSample.db")
			.setLogLevel(LogLevel.FULL)
			.init();
}
 
源代码12 项目: VirtualAPK   文件: RemoteContentProvider.java
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    ContentProvider provider = getContentProvider(uri);
    Uri pluginUri = Uri.parse(uri.getQueryParameter(KEY_URI));
    if (provider != null) {
        return provider.delete(pluginUri, selection, selectionArgs);
    }

    return 0;
}
 
源代码13 项目: Neptune   文件: PluginLoadedApk.java
/**
 * 在插件中查找可以处理这个Uri的Provider
 */
public ContentProvider getContentProvider(Uri uri) {
    if (uri == null || TextUtils.isEmpty(uri.getAuthority())) {
        return null;
    }
    return mProviderMaps.get(uri.getAuthority());
}
 
源代码14 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public void revokeUriPermission(String targetPackage, Uri uri, int modeFlags) {
    try {
        ActivityManager.getService().revokeUriPermission(
                mMainThread.getApplicationThread(), targetPackage,
                ContentProvider.getUriWithoutUserId(uri), modeFlags, resolveUserId(uri));
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}
 
源代码15 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
    try {
        return ActivityManager.getService().checkUriPermission(
                ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags,
                resolveUserId(uri), null);
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}
 
源代码16 项目: android-test   文件: ProviderTestRule.java
/**
 * Allows to add additional ContentProvider and the corresponding authority for testing.
 * Similarly, {@link #setDatabaseFile}, {@link #setDatabaseCommands}, {@link
 * #setDatabaseCommandsFile}, and {@link #runDatabaseCommands} can be used for this
 * ContentProvider.
 *
 * @param providerClass The class of the added ContentProvider under test.
 * @param providerAuth The authority defined for the added ContentProvider under test.
 */
public <T extends ContentProvider> Builder addProvider(
    @NonNull Class<T> providerClass, @NonNull String providerAuth) {
  checkNotNull(providerClass);
  checkNotNull(providerAuth);
  checkState(providerClasses.size() > 0, "No existing provider yet while trying to add more");
  checkState(
      !providerClasses.containsKey(providerAuth),
      String.format("ContentProvider with authority %s already exists.", providerAuth));
  providerClasses.put(providerAuth, providerClass);
  return this;
}
 
源代码17 项目: android_9.0.0_r45   文件: MmsServiceBroker.java
/**
 * Modifies the Uri to contain the caller's userId, if necessary.
 * Grants the phone package on primary user permission to access the contentUri,
 * even if the caller is not in the primary user.
 *
 * @param contentUri The Uri to adjust
 * @param action The intent action used to find the associated carrier app
 * @param permission The permission to add
 * @return The adjusted Uri containing the calling userId.
 */
private Uri adjustUriForUserAndGrantPermission(Uri contentUri, String action,
        int permission) {
    final Intent grantIntent = new Intent();
    grantIntent.setData(contentUri);
    grantIntent.setFlags(permission);

    final int callingUid = Binder.getCallingUid();
    final int callingUserId = UserHandle.getCallingUserId();
    if (callingUserId != UserHandle.USER_SYSTEM) {
        contentUri = ContentProvider.maybeAddUserId(contentUri, callingUserId);
    }

    long token = Binder.clearCallingIdentity();
    try {
        LocalServices.getService(ActivityManagerInternal.class)
                .grantUriPermissionFromIntent(callingUid, PHONE_PACKAGE_NAME,
                        grantIntent, UserHandle.USER_SYSTEM);

        // Grant permission for the carrier app.
        Intent intent = new Intent(action);
        TelephonyManager telephonyManager =
            (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
        List<String> carrierPackages = telephonyManager.getCarrierPackageNamesForIntent(
                intent);
        if (carrierPackages != null && carrierPackages.size() == 1) {
            LocalServices.getService(ActivityManagerInternal.class)
                    .grantUriPermissionFromIntent(callingUid, carrierPackages.get(0),
                            grantIntent, UserHandle.USER_SYSTEM);
        }
    } finally {
        Binder.restoreCallingIdentity(token);
    }
    return contentUri;
}
 
源代码18 项目: springreplugin   文件: PluginPitProviderBase.java
@Override
public void onLowMemory() {
    for (ContentProvider cp : mHelper.mProviderAuthorityMap.values()) {
        cp.onLowMemory();
    }
    super.onLowMemory();
}
 
源代码19 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
     try {
        ActivityManagerNative.getDefault().grantUriPermission(
                mMainThread.getApplicationThread(), toPackage,
                ContentProvider.getUriWithoutUserId(uri), modeFlags, resolveUserId(uri));
    } catch (RemoteException e) {
    }
}
 
源代码20 项目: Android-Plugin-Framework   文件: PluginLauncher.java
private static void removeProvider(String authority, Map map) {
	if (map == null || authority == null) {
		return;
	}
	Iterator<Map.Entry> iterator = map.entrySet().iterator();
	while(iterator.hasNext()) {
		Map.Entry entry = iterator.next();
		ContentProvider contentProvider = new HackActivityThreadProviderClientRecord(entry.getValue()).getProvider();
		if (contentProvider != null && authority.equals(new HackContentProvider(contentProvider).getAuthority())) {
			iterator.remove();
			LogUtil.e("remove plugin contentprovider from map for " + authority);
			break;
		}
	}
}
 
源代码21 项目: springreplugin   文件: PluginPitProviderBase.java
@Override
public Uri insert(Uri uri, ContentValues values) {
    PluginProviderHelper.PluginUri pu = mHelper.toPluginUri(uri);
    if (pu == null) {
        return null;
    }
    ContentProvider cp = mHelper.getProvider(pu);
    if (cp == null) {
        return null;
    }
    return cp.insert(pu.transferredUri, values);
}
 
源代码22 项目: AndroidComponentPlugin   文件: ContextImpl.java
/** @hide */
@Override
public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags, IBinder callerToken) {
    try {
        return ActivityManagerNative.getDefault().checkUriPermission(
                ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags,
                resolveUserId(uri), callerToken);
    } catch (RemoteException e) {
        return PackageManager.PERMISSION_DENIED;
    }
}
 
源代码23 项目: android-test   文件: ProviderArgs.java
/** Pass in the provider instance to hold a weak reference to it. */
public void setProviderRef(ContentProvider provider) {
  if (providerRef != null) {
    Log.w(
        TAG,
        String.format(
            "Reference to Provider instance " + "with authority %s already set", authority));
  }
  providerRef = new WeakReference<>(provider);
}
 
源代码24 项目: VirtualAPK   文件: RemoteContentProvider.java
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    ContentProvider provider = getContentProvider(uri);
    Uri pluginUri = Uri.parse(uri.getQueryParameter(KEY_URI));
    if (provider != null) {
        return provider.query(pluginUri, projection, selection, selectionArgs, sortOrder);
    }

    return null;
}
 
源代码25 项目: VirtualAPK   文件: RemoteContentProvider.java
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    ContentProvider provider = getContentProvider(uri);
    Uri pluginUri = Uri.parse(uri.getQueryParameter(KEY_URI));
    if (provider != null) {
        return provider.update(pluginUri, values, selection, selectionArgs);
    }

    return 0;
}
 
源代码26 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
     try {
        ActivityManager.getService().grantUriPermission(
                mMainThread.getApplicationThread(), toPackage,
                ContentProvider.getUriWithoutUserId(uri), modeFlags, resolveUserId(uri));
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}
 
源代码27 项目: android_9.0.0_r45   文件: ContextImpl.java
@Override
public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
    try {
        return ActivityManager.getService().checkUriPermission(
                ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags,
                resolveUserId(uri), null);
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}
 
源代码28 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
    try {
        return ActivityManager.getService().checkUriPermission(
                ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags,
                resolveUserId(uri), null);
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}
 
源代码29 项目: AndroidComponentPlugin   文件: ContextImpl.java
/** @hide */
@Override
public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags, IBinder callerToken) {
    try {
        return ActivityManager.getService().checkUriPermission(
                ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags,
                resolveUserId(uri), callerToken);
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}
 
源代码30 项目: springreplugin   文件: PluginPitProviderBase.java
@Override
public String getType(Uri uri) {
    PluginProviderHelper.PluginUri pu = mHelper.toPluginUri(uri);
    if (pu == null) {
        return null;
    }
    ContentProvider cp = mHelper.getProvider(pu);
    if (cp == null) {
        return null;
    }
    return cp.getType(pu.transferredUri);
}
 
 类所在包
 同包方法