我做U3D的,刚接触AndroidStudio(后面简称AS)。我想在AS上做一个下载网上apk,存放到外部存储公用文件夹下,然后打开的功能;然后打包成aar文件,给Unity用。目前一些功能都实现了,打包aar这里出现了问题。
我的下载逻辑都是写在子模块里面,但是由于子模块没法直接启动,我就从主模块跳转到了子模块来测试。现在在AS上执行能走通,能实现一个创建文件夹下载并打开的功能。现在想将这个功能打包成aar然后提供给Unity使用,问题也就出现在这里 。
我是用真机测试的,手机是安卓10的,api是29。
目前目录是这样的:
子模块,我目前的做测试,实现了一个安装apk的功能:
Unity如果想使用aar,直接调用Call方法就行。
但是由于安卓10以后,访问外部储存需要用户授权,就是手机会弹出一个框,让你点确定才能授权。逻辑用到了onRequestPermissionsResult 这个方法,它是继承Activity类实现的方法。就是说,必须在AS这边有一个界面才行,(不确定,是不是必须要一个界面)
我现在有一个想法,就是unity那边跳转界面到这AS主模块,然后跳到子模块,再开始执行逻辑。
还有个想法就是全部逻辑都写到AS这边来,界面也在这边做,再弄一个unity的apk执行下载完成的事件,这边做完了启动unity的apk。
但是我感觉两种方案都不好,要是拿授权不需要界面就好了,就能直接调用AS这边的方法。
没做过安卓,我现在比较迷茫,希望有人能帮我解惑,我改怎么做才好呢?
我的AS工程 https://gitee.com/fancaihua/android-response.git
// 安装APK包
private void installApk() {
File file = new File("/storage/emulated/0/CreateParty/Install/DJ_Install.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = FileProvider.getUriForFile(this, "com.fch.loadlib.fileprovider", file);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
startActivity(intent);
}
public void requestStoragePermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_STORAGE_PERMISSION);
} else {
// 如果系统版本低于 6.0,则默认具有存储权限
installApk();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_STORAGE_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 如果用户授予了存储权限,则开始下载 APK 文件
installApk();
} else {
// 如果用户拒绝了存储权限,则提示用户
Toast.makeText(this, "存储权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
}