目录
安卓9.0安装apk,完成后弹出打开界面问题
以下为C#代码,纯unity内就可以,不用调用任何jar包
//https://blog.csdn.net/u014234721/article/details/84071053 适用7.0以上
//http://www.manew.com/thread-97298-1-1.html 过时
//path为.apk文件的完整路径
/// <summary>
/// 安装apk,完成后弹出打开界面
/// </summary>
/// <param name="path">apk路径</param>
public static void InstallAPP(string path)
{
try
{
AndroidJavaClass Intent = new AndroidJavaClass("android.content.Intent");
AndroidJavaClass Uri = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", Intent.GetStatic<AndroidJavaObject>("ACTION_VIEW"));
AndroidJavaObject uri = Uri.CallStatic<AndroidJavaObject>("fromFile", new AndroidJavaObject("java.io.File", path.ToJavaString()));
//apk MIME类型为:"application/vnd.android.package-archive",参考https://blog.csdn.net/boom_jia/article/details/52814914
intent.Call<AndroidJavaObject>("setDataAndType", uri, "application/vnd.android.package-archive".ToJavaString());
/*
//解决安卓8.0安装界面不弹出 https://www.cnblogs.com/wuzhang/p/wuzhang20190405.html
//查询所有符合 intent 跳转目标应用类型的应用,注意此方法必须放置在 setDataAndType 方法之后
List<ResolveInfo> resolveLists = MainActivity.instance.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
// 然后全部授权
for (ResolveInfo resolveInfo : resolveLists)
{
String packageName = resolveInfo.activityInfo.packageName;
MainActivity.instance.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
MainActivity.instance.startActivity(intent);
* */
AndroidJavaClass PackageManagerClass = new AndroidJavaClass("android.content.pm.PackageManager");
AndroidJavaObject[] resolveLists = PackageManager.Call<AndroidJavaObject>("queryIntentActivities", intent, PackageManagerClass.GetStatic<int>("MATCH_DEFAULT_ONLY")).Call<AndroidJavaObject[]>("toArray");
AndroidLogI("resolveLists:" + resolveLists.Length);
for (int i = 0; i < resolveLists.Length; i++)
{
string packageName = resolveLists[i].Get<AndroidJavaObject>("activityInfo").Get<string>("packageName");
int grantUriPer = Intent.GetStatic<int>("FLAG_GRANT_READ_URI_PERMISSION") | Intent.GetStatic<int>("FLAG_GRANT_WRITE_URI_PERMISSION");
UnityActivity.Call("grantUriPermission", packageName, uri, grantUriPer);
}
UnityActivity.Call("startActivity", intent);
}
catch (Exception e)
{
AndroidLogI(e.Message.ToString());
throw;
}
}
private static AndroidJavaObject _UnityActivity = null;
/// <summary>
/// 获取当前App的Activity
/// </summary>
/// <returns></returns>
public static AndroidJavaObject UnityActivity
{
get
{
if (_UnityActivity == null)
{
_UnityActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
}
return _UnityActivity;
}
}
/// <summary>
/// C# string 转换为Java String
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public static AndroidJavaObject ToJavaString(this string msg)
{
return new AndroidJavaObject("java.lang.String", msg);
}
安卓9.0 默认禁止HTTP请求的问题
<!--Android9.0 默认是禁止所有的HTTP请求的,设置以下代码才可以正常进行网络请求: android:usesCleartextTraffic="true"-->
<application
android:usesCleartextTraffic="true">
</application>
AndroidMainifest配置不能打包问题
问题描述:自己修改了unity项目中的Plugins/Android中的AndroidMainifest文件,有时打包出来AndroidMainifest并没有修改
解决方法:
方法1.打成AAR包会自动合并,不会删除已经调试的内容
方法2.修改unity默认的AndroidMainifest
例如:前面部分为unity的安装路径,D:\Program Files\Unity2017.4.34f1\Editor\Data\PlaybackEngines\AndroidPlayer\Apk
检查是否有在其他应用上显示的权限
以下为java代码,C#调用动态设置为unity的activity
//检查是否有在其他应用上显示的权限
public static boolean checkWindowPermission(Activity myActivity) {
if (VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(myActivity)) {
Toast.makeText(myActivity, "当前无权限,请授权!", Toast.LENGTH_LONG).show();
myActivity.startActivity(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse("package:" + myActivity.getPackageName())));
return false;
}
return true;
}