最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android:纯按键式文件浏览器开发指南
时间:2026-05-27 14:30:02 编辑:袖梨 来源:一聚教程网
本文回顾了一个教育平板项目的文件浏览器开发过程,针对无触屏设备通过纯按键交互实现层级化资源管理。以下是关键实现要点和技术细节。
硬件:低端 TV 盒子/,配红外遥控器,无触屏设备
内容:TF 卡 /听力 目录下,按年级分文件夹,叶子节点是 .mp3 或自定义加密音频
核心诉求:
上下键循环选中(到顶再按上回到底部)
确定键进入文件夹或播放
返回键回到上级目录,且焦点停留在刚才进入的那个文件夹上(这是 TV 交互的硬需求)
文件过滤:隐藏系统目录,按年级名排序
1、定义变量
TextView title; //标题
RecyclerView recyclerView; //列表
UnitAdapter mUnitAdapter; //适配器
ArrayList unitList; //列表数据
LinearLayout ll_no_data; //无数据view
boolean isNoData = false; //无数据标识String sDcardDir; //根目录名称
String cur_name; //当前目录名称
String cur_path; //当前目录路径
String last_title; //上次标题名称
int last_mPos = 0; //上次选择位置
int first_mPos = 0; //第一次点击位置String root_name = ""; //一级目录名称
String title_str = "";
2、初始化和加载
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_list); title_str = getIntent().getStringExtra("title"); //传入的标题
title = findViewById(R.id.title);
if (!TextUtils.isEmpty(title_str)) {
root_name = title_str;
}
title.setText(root_name);
sDcardDir = SDCardUtils.getTfStorageDirectory(this) + "/听力"; //根目录路径 recyclerView = findViewById(R.id.recyclerView);
ll_no_data = findViewById(R.id.ll_no_data);
title.setTextColor(getResources().getColor(R.color.col_1E2736));
unitList = new ArrayList();
mUnitAdapter = new UnitAdapter(this, new View.OnClickListener() {
@Override
public void onClick(View v) {// item点击
mUnitAdapter.mPosSomeTime = ((int) v.getTag());
Log.d("TAG", "((int) v.getTag()---> " + ((int) v.getTag()));
mUnitAdapter.notifyDataSetChanged();
ClickSelect(); //选择目录或文件
}
});
recyclerView.setAdapter(mUnitAdapter);
verifyStoragePermissions(this); //权限请求
} /**
* 获取tf卡根目录
* @param context
* @return
*/
public static String getTfStorageDirectory(Context context) {
String tfDir = null;
StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
Class smc = sm.getClass();
try {
Method getPaths = smc.getMethod("getVolumePaths", new Class[0]);
String[] paths = (String[])getPaths.invoke(sm, new Object[]{});
if (paths.length >= 2) {
tfDir = paths[1];
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return tfDir;
}private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"}; //然后通过一个函数来申请
public static void verify
相关文章
- 虾米音乐如何恢复删除的歌单 05-27
- 恐龙神奇宝贝手游恐龙养成攻略 恐龙神奇宝贝手游新手恐龙培养与进阶技巧 05-27
- 全能扫描王使用操作相关问题详情 05-27
- 雷霆大战手游T0船长推荐 雷霆大战手游最强船长阵容与培养指南 05-27
- 铸兵之王开荒指南 铸兵之王新手入门全流程攻略 05-27
- 《快手》号修改方法 05-27