如何获取访问我的应用程序内容提供者的应用程序包名称?

How to get the package name of the app which access content provider of my app?

实际上,当任何其他应用程序从我的应用程序共享的内容提供者获取数据时,我想要某种广播

您可以使用 Binder.getCallingUid() 获取调用应用程序的 uid。 然后使用 getPackageManager().getNameForUid(uid) 获取调用应用程序的包名称。

示例:

@Override
    public Uri insert(Uri uri, ContentValues values) {
        int code = sUriMatcher.match(uri);
        String callingPackageName = getContext().getPackageManager().getNameForUid(
                Binder.getCallingUid());
        Log.d(TAG, "calling Package Name::" + callingPackageName);

        if (callingPackageName.equals(PKG_MY_PACKAGE)) {
           //do what you want
        }
        .
        .
        .
        return uri;
    }

也许我来晚了,但在 API19 及更高版本中你可以调用

getCallingPackage();

在您的 ContentProvider 中执行此操作。

查看 Android Reference 了解更多详情。