Unity如何判断手机是否安装某APP应用

来源:互联网 发布:电脑加速软件知乎 编辑:程序博客网 时间:2024/06/04 19:34

—————————————————————————————————————————
简单介绍一下如何判断手机里是否安装了某款APP,先配一张图,显得高大上。
这里写图片描述
Android系统手机和iOS系统手机判断方式不同,要分开来做,首先介绍iOS系统,比较简单。
—————————————————————————————————————————
一、iOS判断手机是否安装Line
使用iOS系统提供的canOpenURL函数判断:

BOOL CanOpenLine(){
NSURL *lineURL = [NSURL URLWithString:@"line://"];
if ([[UIApplication sharedApplication] canOpenURL:lineURL])
{
return YES;
}else{
return NO;
}
}

这是OC代码,在unity里面怎么调用呢?
首先在unity中写这个:

[System.Runtime.InteropServices.DllImport("__Internal")]private static extern bool CanOpenLine();

然后在.mm脚本里面这么做

    extern "C" {     BOOL CanOpenLine(){          }     }

.mm脚本放在工程里这个位置:
unity 路径
介绍完了是否存在Line,那么怎么判断是否存在微信或其他APP呢?
请注意这句:NSURL *lineURL = [NSURL URLWithString:@”line://”];
这里的“line://”叫IOS URL schemes,常用的可以百度搜,如:
QQ mqq:// 微信是 weixin:// 网易新闻 newsapp:// 淘宝 taobao://
对,换成“weixin://”就是判断是否存在微信。对于一些不常用的软件怎么查找url schemes 呢?
找到ipa文件 改成zip解压 在playload文件下找到info.plist 用文本编辑软件打开查schemes 都能找到。

如果你认为到此就完了,你太天真了!在iOS操作系统iOS9以前以上步是没问题的。在iOS9以后需要增加一步。
为应用程序添加白名单:
找到Xcode工程里的“Info.plist”文件,然后打开添加以下代码就没问题了。

<key>LSApplicationQueriesSchemes</key>    <array>        <string>line</string>    </array>

另外附加一个问题,如何查看APP在APP Store的链接?如line:https://itunes.apple.com/jp/app/line/id443904275?mt=8
打开App Store进入应用,右上角的分享按钮(从右往左数第二个),拷贝连接即可^_^
这里写图片描述

—————————————————————————————————————————
二、Android判断是否安装Line
通过遍历所有应用程序的包名,判断是否存在line的包名,在unity里这么写:

    AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");            AndroidJavaObject ca = up.GetStatic<AndroidJavaObject>("currentActivity");            AndroidJavaObject packageManager = ca.Call<AndroidJavaObject>("getPackageManager");            AndroidJavaObject appList = packageManager.Call<AndroidJavaObject>("getInstalledPackages",0);                  int num = appList.Call<int>("size");                  for(int i = 0; i < num; i++)                  {                         AndroidJavaObject appInfo = appList.Call<AndroidJavaObject>("get", i);                         string packageNew = appInfo.Get<string>("packageName");                         if(packageNew.CompareTo("jp.naver.line.android") == 0)                         {                               return true;                         }                  }                  return false;

然后直接调用即可。

“jp.naver.line.android ”是日本line包名。如何查看其它APP包名呢?
1、百度可以查到大部分常用的包名,小部分查不到的包名使用apktool反编译.apk,到AndroidManifest.xml里找。
2、到Google Play商店该APP页面,以Line为例,https://play.google.com/store/apps/details?id=jp.naver.line.android
URL中的“jp.naver.line.android”便是Package Name了。
这里写图片描述

阅读全文
0 0
原创粉丝点击