如何获取访问我的应用的Content Provider的应用的包名?

问题描述 投票:0回答:3

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

android android-contentprovider android-package-managers
3个回答
13
投票

您可以使用

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;
    }

8
投票

也许我来晚了,但在 API19 及以上你可以直接调用

getCallingPackage();

在您的 ContentProvider 中执行此操作。

查看Android参考了解更多详情。


0
投票

如果您只想检查调用者是否是另一个应用程序,您甚至不需要包名称 - 只需比较 Binder.getCallingUidProcess.myUid 的 UID:

if (Binder.getCallingUid() != Process.myUid()) {
    // An external app has called this
}
© www.soinside.com 2019 - 2024. All rights reserved.