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

Posted

技术标签:

【中文标题】如何获取访问我的应用的内容提供者的应用的包名?【英文标题】:How to get the package name of the app which access content provider of my app? 【发布时间】:2015-12-29 08:30:11 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以使用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;
    

【讨论】:

【参考方案2】:

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

getCallingPackage();

在您的 ContentProvider 中执行此操作。

查看android Reference了解更多详情。

【讨论】:

以上是关于如何获取访问我的应用的内容提供者的应用的包名?的主要内容,如果未能解决你的问题,请参考以下文章

如何从android中的包名中获取类名?

Android 在Android手机上获取其他应用的包名及版本号

进程间通信时是不是可以获取活动调用者应用程序的包名?

请问如何获取安卓正在前台运行的应用程序的包名?

获取app应用的包名

Android 11,获取已安装应用的包名,和应用名