Android使用自带的文件管理器选择文件并读取内容

开启选择页面:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");//筛选器
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent,"选择一个文件"),1);

重写onActivityResult方法来获取选择的文件中的内容(这里是读取的文本文件)

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            try {
                //保存读取到的内容
                StringBuilder result = new StringBuilder();
                //获取URI
                Uri uri = data.getData();
                //获取输入流
                InputStream is = getContext().getContentResolver().openInputStream(uri);
                //创建用于字符输入流中读取文本的bufferReader对象
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String line;
                while ((line = br.readLine()) != null) {
                    //将读取到的内容放入结果字符串
                    result.append(line);
                }
                //文件中的内容
                String content = result.toString();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较复杂的问题,需要用到多个技术栈和知识点,我可以给你提供一些大致的思路和代码示例,但是具体实现还需要根据你的具体需求进行调整和修改。 首先,我们需要使用一个计时器来实现倒计时的功能,这里可以使用 Android 自带的 CountDownTimer 类,具体用法可以参考官方文档。 其次,我们需要连接数据库来保存倒计时的数据,这里可以使用 Android 自带的 SQLite 数据库,具体用法可以参考官方文档。 最后,我们需要使用广播接收器来接收系统广播和自定义广播,这里可以使用 Android 自带的 BroadcastReceiver 类,具体用法可以参考官方文档。 下面是一个简单的示例代码: activity_main.xml ```xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_countdown" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40sp" android:layout_centerInParent="true"/> <Button android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start" android:layout_below="@id/tv_countdown" android:layout_alignParentLeft="true" android:layout_marginTop="20dp"/> <Button android:id="@+id/btn_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop" android:layout_below="@id/tv_countdown" android:layout_alignParentRight="true" android:layout_marginTop="20dp"/> </RelativeLayout> ``` MainActivity.java ```java public class MainActivity extends AppCompatActivity { private TextView tvCountdown; private Button btnStart, btnStop; private CountDownTimer countDownTimer; private SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvCountdown = findViewById(R.id.tv_countdown); btnStart = findViewById(R.id.btn_start); btnStop = findViewById(R.id.btn_stop); // 打开或创建数据库 db = openOrCreateDatabase("countdown.db", MODE_PRIVATE, null); db.execSQL("CREATE TABLE IF NOT EXISTS countdown (id INTEGER PRIMARY KEY AUTOINCREMENT, time INTEGER)"); btnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 开始倒计时 startCountdown(60 * 1000); // 倒计时1分钟 } }); btnStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 停止倒计时 stopCountdown(); } }); // 注册广播接收器 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_TIME_TICK); // 系统每分钟发出的广播 intentFilter.addAction("com.example.countdown"); // 自定义广播 registerReceiver(receiver, intentFilter); } // 开始倒计时 private void startCountdown(long millisInFuture) { countDownTimer = new CountDownTimer(millisInFuture, 1000) { @Override public void onTick(long millisUntilFinished) { // 更新倒计时显示 tvCountdown.setText(String.format("%d:%02d", millisUntilFinished / 1000 / 60, millisUntilFinished / 1000 % 60)); // 保存倒计时剩余时间到数据库 ContentValues values = new ContentValues(); values.put("time", millisUntilFinished); db.insert("countdown", null, values); } @Override public void onFinish() { // 倒计时结束时发送自定义广播 Intent intent = new Intent("com.example.countdown"); sendBroadcast(intent); } }.start(); } // 停止倒计时 private void stopCountdown() { if (countDownTimer != null) { countDownTimer.cancel(); countDownTimer = null; } } // 广播接收器 private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) { // 系统每分钟的广播,可以在这里做一些需要每分钟执行的操作 } else if ("com.example.countdown".equals(intent.getAction())) { // 自定义广播,倒计时结束时触发 Toast.makeText(MainActivity.this, "Countdown finished", Toast.LENGTH_SHORT).show(); } } }; @Override protected void onDestroy() { super.onDestroy(); // 关闭数据库和注销广播接收器 db.close(); unregisterReceiver(receiver); } } ``` 这里我们使用了一个简单的数据库表来保存倒计时剩余时间,每次倒计时更新时都会插入一条记录,这样就可以在倒计时结束时从数据库获取倒计时剩余时间,而不是在内存中保存,避免了一些问题。 以上是一个简单的实现思路和代码示例,具体实现还需要根据你的具体需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值