
你这样直接转换是不行的JNIEXPORT jbyteArray JNICALL Java_Test_getByteArray(JNIEnv env, jobject obj){jbyteArray firstMacArray = env->NewByteArray( 6 );elidedjbyte bytes = env->GetByteArrayElements( firstMacArray, 0);for ( int i = 0; i < sizeof( pAdapterInfo->Address ); i++ ){bytes[ i ] = pAdapterInfo->Address[ i ];}env->SetByteArrayRegion(firstMacArray, 0, 6, bytes );return firstMacArray;}另外,给你一个有关各种转换的博客 >
assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。
1 先在Activity里面调用getAssets() 来获取AssetManager引用。
2 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。
3 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStreamclose() 。
4调用AssetManagerclose() 关闭AssetManager。
需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的 *** 作
代码public String getFromAssets(String fileName){
try {
InputStreamReader inputReader = new InputStreamReader( getResources()getAssets()open(fileName) );
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = bufReaderreadLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
eprintStackTrace();
}
}
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManagerlist("");
} catch (IOException e) {
Loge("tag", egetMessage());
}
再去用File判断是文件、还是目录
在自己的app中安装assets目录下的apk文件的方法:
详细过程如下:
public class MainActivity extends Activity {
Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
mContext = this;
//ToastmakeText(this, ""+EnvironmentgetExternalStorageDirectory()getAbsolutePath(), 0)show();
if(copyApkFromAssets(this, "testapk", EnvironmentgetExternalStorageDirectory()getAbsolutePath()+"/testapk")){
Builder m = new AlertDialogBuilder(mContext)
setIcon(Rdrawableic_launcher)setMessage("是否安装?")
setIcon(Rdrawableic_launcher)
setPositiveButton("yes", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(IntentACTION_VIEW);
intentaddFlags(IntentFLAG_ACTIVITY_NEW_TASK);
intentsetDataAndType(Uriparse("file://" + EnvironmentgetExternalStorageDirectory()getAbsolutePath()+"/testapk"),
"application/vndandroidpackage-archive");
mContextstartActivity(intent);
}
});
mshow();
}
}
public boolean copyApkFromAssets(Context context, String fileName, String path) {
boolean copyIsFinish = false;
try {
InputStream is = contextgetAssets()open(fileName);
File file = new File(path);
filecreateNewFile();
FileOutputStream fos = new FileOutputStream(file);
byte[] temp = new byte[1024];
int i = 0;
while ((i = isread(temp)) > 0) {
foswrite(temp, 0, i);
}
fosclose();
isclose();
copyIsFinish = true;
} catch (IOException e) {
eprintStackTrace();
}
return copyIsFinish;
}
}
从assets文件夹中读取txt文件 Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在Rjava自
你获取的uri没有问题。但assets目录下的不能使用这种方法读取。你得把它先复制到sdcard中,然后从sdcard中传递这个至于原因嘛:assets目录里面的资源文件还在应用程序的apk文件中,一个压缩文件中。所以不能这样读
1默认Android Studio的assets文件夹路径:src/main/assets,在assets文件夹创建teachcoursexml文件,引用该文件的写法:
123456InputStream is = null;AssetManager manager = getAssets();try { is = manageropen("teachcoursexml");} catch (Exception e) { eprintStackTrace();}
2直接写上assets文件夹内文件的名称,使用AssetsManager管理器打开,获取输入流,最后解析里面的内容
以上就是关于jni如何读取assets下图片/二进制文件全部的内容,包括:jni如何读取assets下图片/二进制文件、android如何获取assets文件夹下面文件的大小、Android 在assets的子文件夹如何读等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)