最近项目中要在安卓端的WebView或XWalkView中加载一个大型三维模型(实际上是使用threejs方法加载的),有一两百M大。我尝试了多种方法:
1. 放在assets文件夹中,打包进apk。好像assets文件夹中有单个文件大小上限。文件过大会报错。
2. 放到Android模拟器本地(我放在storage/emulated/0/DownLoad文件夹下),但是在js中这个文件的路径不知道该怎么写。问题总结一下就是:
(因为要写在js中)安卓模拟器的storage/emulated/0/DownLoad/model.obj的绝对路径是什么?
或者在js写相对路径的方法是什么?这几个绝对路径我都试过了,不对:
"/storage/emulated/0/DownLoad/model.obj"
"/DownLoad/model.obj"
1. 放在assets文件夹中,打包进apk。好像assets文件夹中有单个文件大小上限。文件过大会报错。
2. 放到Android模拟器本地(我放在storage/emulated/0/DownLoad文件夹下),但是在js中这个文件的路径不知道该怎么写。问题总结一下就是:
(因为要写在js中)安卓模拟器的storage/emulated/0/DownLoad/model.obj的绝对路径是什么?
或者在js写相对路径的方法是什么?这几个绝对路径我都试过了,不对:
"/storage/emulated/0/DownLoad/model.obj"
"/DownLoad/model.obj"
那么你可以在这个方法中进行你的下一步操作:
Environment.getExternalStorageDirectory()——>这个是获取外部存储的路径(因为不同的设备可能路径有点不同,所以用这个方法就可以获取对应的存储目录,然后拼接上你的文件夹、文件名字)
Environment.getExternalStorageDirectory()+文件路径,这个字符串传递给js,js是无法找到文件的,正如1楼所说。
但是如果用java代码直接加载文件放到缓存,等于是把加载到的数据赋值给一个变量。而我最终是要在js中分析、处理并显示这个模型数据的,但是这个变量要如何才能传给js呢?其实可行的方法就两种:
一是,在js中加载数据(貌似找不到安卓本地文件,Environment.getExternalStorageDirectory()+文件路径也没用);
二是,在java中加载数据(貌似获得的变量传不到js里)。到底该咋办啊??
我很方!!
Environment.getExternalStorageDirectory()+文件路径,这个字符串传递给js,js是无法找到文件的,正如1楼所说。
但是如果用java代码直接加载文件放到缓存,等于是把加载到的数据赋值给一个变量。而我最终是要在js中分析、处理并显示这个模型数据的,但是这个变量要如何才能传给js呢?其实可行的方法就两种:
一是,在js中加载数据(貌似找不到安卓本地文件,Environment.getExternalStorageDirectory()+文件路径也没用);
二是,在java中加载数据(貌似获得的变量传不到js里)。到底该咋办啊??
我很方!!
你先通过手机查看是否将文件下载到了本地,然后写死这个文件来获取
Environment.getExternalStorageDirectory()+文件路径,这个字符串传递给js,js是无法找到文件的,正如1楼所说。
但是如果用java代码直接加载文件放到缓存,等于是把加载到的数据赋值给一个变量。而我最终是要在js中分析、处理并显示这个模型数据的,但是这个变量要如何才能传给js呢?其实可行的方法就两种:
一是,在js中加载数据(貌似找不到安卓本地文件,Environment.getExternalStorageDirectory()+文件路径也没用);
二是,在java中加载数据(貌似获得的变量传不到js里)。到底该咋办啊??
我很方!!
你先通过手机查看是否将文件下载到了本地,然后写死这个文件来获取
手机上有文件关键是怎么在内嵌h5获取文件?我也遇到了这个问题,在h5路径应该怎么写?
onShowFileChooser需要将文件转换为媒体数据才能被使用,下面是把图片路径转换为媒体打代码 public static Uri getMediaContentUri(String absolutePath) {
Uri newUri;
// 先查找是否有这个uri
Cursor cursor = MyLibsApp.mApp.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Images.Media._ID},
MediaStore.Images.Media.DATA + "=? ",
new String[]{absolutePath}, null);
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
newUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(id));
} else {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, absolutePath);
newUri = MyLibsApp.mApp.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
if (cursor != null)
cursor.close();
return newUri;
}
然后返回过去就行了filePathCallback.onReceiveValue(new Uri[]{FileUtils.getMediaContentUri(resultList.get(0).getPhotoPath())});
或者你复制到自己的缓存目录再把绝对路径传给h5试试(理论上可行,没试过)