package org.cocos2dx.javascript;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Looper;
import android.util.Log;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class SelectFile {
private static SelectFile instance = null;
public static SelectFile getInstance(){
if(instance == null){
instance = new SelectFile();
}
return instance;
}
public static AppActivity mainActivity = null;
// 在AppActivity中的onCreate调用该函数进行初始化
public void init(AppActivity activity){
mainActivity = activity;
// 需要动态获取读取内存文件读取权限
if (Build.VERSION.SDK_INT >= 23) {
int REQUEST_CODE_PERMISSION_STORAGE = 100;
String[] permissions = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
for (String str : permissions) {
mainActivity.requestPermissions(permissions, REQUEST_CODE_PERMISSION_STORAGE);
}
}
}
private static final int FILE_SELECT_CODEB = 1;
// 打开文件选择器,选择文件
void openselectFile(){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");//设置类型
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
mainActivity.startActivityForResult(Intent.createChooser(intent, "选择文件"),
FILE_SELECT_CODEB);
} catch (android.content.ActivityNotFoundException ex) {
Log.w("openselectFile","失败");
}
}
// 读取选择文件的内容
public void readFile(String path) throws IOException {
String content = ""; //文件内容字符串
//打开文件
File file = new File(path);
InputStream instream = new FileInputStream(file);
if (instream != null)
{
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
Log.d( "readFile1: ", buffreader.toString());
String line;
//分行读取
while (( line = buffreader.readLine()) != null) {
content += line;
}
instream.close();
}
// 最终结果
Log.d( "readFile2: ",content);
}
// 在AppActivity中的onActivityResult调用该函数
public void onActivityResult(int requestCode, int resultCode, Intent data){
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//高于API19版本
String[] split = data.getData().getPath().split("\\:");
String p = "";
if (split.length >= 2) {
p = Environment.getExternalStorageDirectory() + "/" + split[1];
Log.d( "onActivityResult: ",p);
try {
SelectFile.getInstance().readFile(p);
} catch (IOException e) {
e.printStackTrace();
}
boolean mainthread = Looper.getMainLooper() == Looper.myLooper();
Log.d("onActivityResult",mainthread + "");
// new ReadFileTask().execute(p);
}
} else {
//低于API19版本
Uri uri = data.getData();
Log.d("onActivityResult","文件路径" + uri.getPath());
}
}
}
}
}