Unity与安卓交互 记录贴,提问帖
创建两个类
更新: 看了下方你能学到基础的安卓API自己关于安卓方面也不会再感到迷茫,我会仔细解释相关API,我们以上方的例子为基础加以修改
- 第一步:在上方工程中重新建一个Mold并选择AndroidLibrary(记住打出的Arr包即插件名称将默认为该名称)
这是我新建的AndroidLibrary - 直接将上方这两java文件以及Unity的lib‘文件复制到对应目录.提示可以直接 :“Ctrl + c 和Ctrl + v ”
- 对CallAndroid类进行修改去掉多余的行为
import android.app.Activity;
import android.content.Intent;
import com.unity3d.player.UnityPlayer;
public class CallAndroid {
//Unity中会调用这个方法,用于打开本地相册
//str 为unity传过来的路径
public void TakePhoto(String str)//我们不需要unity传它的上下文 可以直接通过UnityPlayer.currentActivity获取Unity的界面(Activity)
{
System.out.println("路径:"+str);
Intent intent = new Intent(UnityPlayer.currentActivity,WebViewActivity.class);//WebViewActivity为需要跳转的界面(Activity) //记得回来修改这里WebViewActivity改为权限的Activity我这里是TestActivity
intent.putExtra("path", str);//传给跳转的Activity 参数一是键 参数二是值
UnityPlayer.currentActivity.startActivity(intent);//跳转到另一个界面(Activity)
}
}
- 动态权限部分:安卓6.0后有了动态权限(即需要向用户申请权限)而且 我们不希望游戏一打开就提示用户给予权限
所有我们现在的需求就是在调用时先判断用户是否给予了对应权限 大家可以自己网上找一些写的好的我这里给大家提供一个博主写的,感觉很不错 “我找不到那篇博客了如果找到了会贴上地址的”
package com.jing.pickpicture.permission;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
/**
* @author Admin
* @version $Rev$
* @des ${TODO}
* @updateAuthor $Author$
* @updateDes ${TODO}
*/
public class BasePermission extends Activity {
//**************** Android M Permission (Android 6.0权限控制代码封装)
private int permissionRequestCode = 88;
private PermissionCallback permissionRunnable;
public interface PermissionCallback {
void hasPermission();
void noPermission();
}
/**
* Android M运行时权限请求封装
*
* @param permissionDes 权限描述
* @param runnable 请求权限回调
* @param permissions 请求的权限(数组类型),直接从Manifest中读取相应的值,比如Manifest.permission.WRITE_CONTACTS
*/
@RequiresApi(api = Build.VERSION_CODES.M)
public void performCodeWithPermission(@NonNull String permissionDes, PermissionCallback runnable, @NonNull String... permissions) {
//子类调用
if (permissions == null || permissions.length == 0)
return;
// this.permissionrequestCode = requestCode;
this.permissionRunnable = runnable;
if ((Build.VERSION.SDK_INT < Build.VERSION_CODES.M) || checkPermissionGranted(permissions)) {
//安卓api小于26或者已经授权 直接调用子类传来的PermissionCallback接口hasPermission函数
if (permissionRunnable != null) {
permissionRunnable.hasPermission();
permissionRunnable = null;
}
} else {
//
//permission has not been granted.
requestPermission(permissionDes, permissionRequestCode, permissions);//申请权限
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
private boolean checkPermissionGranted(String