欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群
啊,不想多说什么了,今天下午的任务还没有完成,抽空记录了一下。
获取app列表这块,我们有两种做法1:跟前两篇博客一样跟安卓交互调取原生的方法获得2:利用反射直接在Unity端就可以获取到,不用调取安卓原生。这里我会把两种方法的代码都分享给大家,殊不知期间哥们我汤了多少坑。我会把源码跟工程地址直接贴给大家
一,不用跟安卓交互,unity独立完成获取app列表就一下这一个方法就可以了,不用做什么配置也不用要添加什么jar,直接复制粘贴调用就可以,方便快捷
//获取本地app列表
public static List GetAllApk()
{
List apks = new List();
#if UNITY_ANDROID
try
{
AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = up.GetStatic("currentActivity");
AndroidJavaObject packageManager = currentActivity.Call("getPackageManager");
AndroidJavaObject packageInfos = packageManager.Call("getInstalledPackages", 0);
AndroidJavaObject[] packages = packageInfos.Call("toArray");
for (int i = 0; i < packages.Length; i++)
{
AndroidJavaObject applicationInfo = packages[i].Get("applicationInfo");
if ((applicationInfo.Get("flags") & applicationInfo.GetStatic("FLAG_SYSTEM")) == 0)// 判断是不是系统应用
{
string packageName = applicationInfo.Get("packageName");
AndroidJavaObject applicationLabel = packageManager.Call("getApplicationLabel", applicationInfo);
string packageLable = applicationLabel.Call("toString");
apks.Add(packageLable + "|" + packageName);
}
}
}
catch (System.Exception e)
{
Debug.LogWarning(e);
}
#endif
return apks;
}
二,跟安卓交互调取原生获取app列表
package com.crf.xfd.entrty;
public class NativeAppInfoBean {
//应用名
private String appName;
//应用包名
private String packageName;
//是否是系统应用
private boolean isSystemApp;
//初次安装时间
private String firstInstallTime;
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public boolean isSystemApp() {
return isSystemApp;
}
public void setSystemApp(boolean systemApp) {
isSystemApp = systemApp;
}
public String getFirstInstallTime() {
return firstInstallTime;
}
public void setFirstInstallTime(String firstInstallTime) {
this.firstInstallTime = firstInstallTime;
}
@Override
public String toString() {
return "{\"app_name\"" +":\""+appName+"\"}";
/* "appName='" + appName + '\'' +
", packageName='" + packageName + '\'' +
", isSystemApp=" + isSystemApp +
", firstInstallTime='" + firstInstallTime + '\'' +
'}';*/
}
}
package com.crf.xfd.tools;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import com.crf.xfd.entrty.NativeAppInfoBean;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class NativeAppUtils {
/**
* 返回系统中所有应用信息列表
**/
public static List getAllApps(Context context, long lastPostTime) throws Throwable {
PackageManager packageManager = context.getPackageManager();
List list = new ArrayList();
NativeAppInfoBean myAppInfo;
//获取到所有安装了的应用程序的信息,包括那些卸载了的,但没有清除数据的应用程序
List packageInfos = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for (PackageInfo info : packageInfos) {
myAppInfo = new NativeAppInfoBean();
String packageName = info.packageName;
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//初次安装时间
myAppInfo.setFirstInstallTime(sfd.format(new Date(info.firstInstallTime)));
ApplicationInfo appInfo = info.applicationInfo;
//程序名
String appName = appInfo.loadLabel(packageManager).toString();
myAppInfo.setPackageName(packageName);
myAppInfo.setAppName(appName);
if (filterApp(appInfo)) {
myAppInfo.setSystemApp(false);
} else {
myAppInfo.setSystemApp(true);
}
if (lastPostTime == 0) {
list.add(myAppInfo);
} else if (info.firstInstallTime > lastPostTime) {
list.add(myAppInfo);
}
}
return list;
}
/**
* 判断是不是系统应用
*/
public static boolean filterApp(ApplicationInfo info) {
if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
return true;
} else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
return true;
}
return false;
}
}
我会把源码跟工程地址直接贴给大家
安卓端工程代码:https://download.csdn.net/download/qq_37310110/10471920
Unity端工程代码:https://download.csdn.net/download/qq_37310110/10471930
二合一最新优化更新简单易懂版本:https://download.csdn.net/download/qq_37310110/10472555
之后还会有接入高德gpsSDK的记录 请期待
欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群