Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态检查是否在android中安装了特定的应用程序_Android_Tracking_Ads - Fatal编程技术网

动态检查是否在android中安装了特定的应用程序

动态检查是否在android中安装了特定的应用程序,android,tracking,ads,Android,Tracking,Ads,我想知道用户是否已通过我在应用程序中提供的链接安装了应用程序 问题是包名, 首先,我必须安装应用程序以了解应用程序包名称,然后编写代码与我提供的包名称进行比较 我不能为每一个新的应用程序推广都做这个过程 有没有办法在不安装android应用程序的情况下就知道其软件包名称?您可以在Play Store上查看该应用程序 程序包名称位于URL中。。。例如: 重要的部分是id=dae.dfnewsdae.dfnews是软件包名称。您可以在Play Store上查看应用程序 程序包名称位于URL中。。。

我想知道用户是否已通过我在应用程序中提供的链接安装了应用程序

问题是包名, 首先,我必须安装应用程序以了解应用程序包名称,然后编写代码与我提供的包名称进行比较

我不能为每一个新的应用程序推广都做这个过程


有没有办法在不安装android应用程序的情况下就知道其软件包名称?

您可以在Play Store上查看该应用程序

程序包名称位于URL中。。。例如:


重要的部分是
id=dae.dfnews
dae.dfnews
是软件包名称。

您可以在Play Store上查看应用程序

程序包名称位于URL中。。。例如:


重要的部分是
id=dae.dfnews
dae.dfnews
是软件包名称。

如果您的用户从Google play store安装了应用程序,则您的链接应如下所示

com.example.app

或者在类似这样的play store应用程序提示的情况下

market://details?id=com.example.app


最后一部分(id)实际上应该是软件包名称

如果您的用户从Google play store安装应用程序,那么您的链接应该是这样的

com.example.app

或者在类似这样的play store应用程序提示的情况下

market://details?id=com.example.app


最后一部分(id)实际上应该是软件包名称

您可以使用这部分代码列出设备上安装的所有应用程序:

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Source dir : " + packageInfo.sourceDir);
    Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 
}
// the getLaunchIntentForPackage returns an intent that you can use with startActivity() 
final PackageManager pm=getPackageManager();
//获取已安装应用程序的列表。
List packages=pm.getinstalledApplication(PackageManager.GET_元数据);
对于(ApplicationInfo packageInfo:packages){
Log.d(标签,“已安装的软件包:”+packageInfo.packageName);
Log.d(标签,“源目录:”+packageInfo.sourceDir);
Log.d(标签,“启动活动:”+pm.getLaunchIntentForPackage(packageInfo.packageName));
}
//getLaunchIntentForPackage返回一个可以与startActivity()一起使用的意图

比较您请求安装的应用是否已安装。

您可以使用此部分代码列出设备上安装的所有应用:

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Source dir : " + packageInfo.sourceDir);
    Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 
}
// the getLaunchIntentForPackage returns an intent that you can use with startActivity() 
final PackageManager pm=getPackageManager();
//获取已安装应用程序的列表。
List packages=pm.getinstalledApplication(PackageManager.GET_元数据);
对于(ApplicationInfo packageInfo:packages){
Log.d(标签,“已安装的软件包:”+packageInfo.packageName);
Log.d(标签,“源目录:”+packageInfo.sourceDir);
Log.d(标签,“启动活动:”+pm.getLaunchIntentForPackage(packageInfo.packageName));
}
//getLaunchIntentForPackage返回一个可以与startActivity()一起使用的意图

比较您请求安装的应用是否已安装。

他为什么要加载所有已安装的应用?这个设备可以安装100个应用程序,你知道这是什么样的资源消耗吗?他应该只检查列表中是否安装了应用程序。可能一个应用程序比所有应用程序小得多。迭代软件包列表并不是一项耗费资源和时间的操作。当他找到他正在寻找的应用程序时,他可以打破这个循环。如果该应用程序在列表的最后10%中呢?例如,500个中有489个到位?是的,这是太多的资源消耗,当规模可以降低甚至10倍与不同的方法。编码的艺术是加载最小数量的数据以获得结果,上面的代码只加载所有数据。你所说的“大量资源消耗”是什么意思?我做了测试,对于安装在设备上的406个应用程序列表,整个循环花费了123ms。这是可以接受的——我想他不会那么多次这样做了。要检查设备上是否安装了特定的软件包,他只能使用循环第一行中的一个(验证packageInfo.packageName是否与他要检查用户是否已安装的应用程序匹配)。我同意我们应该使用最少的数据量,但如果安卓SDK不提供任何其他东西,它似乎是最好的工作解决方案。你能给出更好的解决方案吗?我们中的两个人在回答中给出了更好的解决方案,你只列出了你希望安装的软件包的应用程序链接,没有更多。列表中的20个应用在任何时候都超过400个应用。因此,如果你可以使用20而不是400,那么这400个是不可接受的。他为什么要加载所有已安装的应用程序?这个设备可以安装100个应用程序,你知道这是什么样的资源消耗吗?他应该只检查列表中是否安装了应用程序。可能一个应用程序比所有应用程序小得多。迭代软件包列表并不是一项耗费资源和时间的操作。当他找到他正在寻找的应用程序时,他可以打破这个循环。如果该应用程序在列表的最后10%中呢?例如,500个中有489个到位?是的,这是太多的资源消耗,当规模可以降低甚至10倍与不同的方法。编码的艺术是加载最小数量的数据以获得结果,上面的代码只加载所有数据。你所说的“大量资源消耗”是什么意思?我做了测试,对于安装在设备上的406个应用程序列表,整个循环花费了123ms。这是可以接受的——我想他不会那么多次这样做了。要检查设备上是否安装了特定的软件包,他只能使用循环第一行中的一个(验证packageInfo.packageName是否与他要检查用户是否已安装的应用程序匹配)。我同意我们应该使用最少的数据量,但如果安卓SDK不提供任何其他东西,它似乎是最好的工作解决方案。你能给出更好的解决方案吗?我们中的两个人在回答中给出了更好的解决方案,你只列出了你希望安装的软件包的应用程序链接,没有更多。列表中的20个应用在任何时候都超过400个应用。因此,如果你可以用20而不是400,那400就不能接受