首页 > 解决方案 > Dexter android 库无法正常工作

问题描述

我正在制作一个音乐播放器项目。这是我的java代码。但这段代码不起作用。当我运行这个应用程序时,该应用程序不会请求许可。它直接显示吐司Permission given。这没有显示音乐列表。

我的java文件

package com.example.sunona;

import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.os.Bundle;
import android.os.Environment;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;

import java.io.File;
import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {

    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listView);

        Dexter.withActivity(this)  // change this
                .withPermission(Manifest.permission.READ_EXTERNAL_STORAGE) //change this
                .withListener(new PermissionListener() {
                    @Override
                    public void onPermissionGranted(PermissionGrantedResponse response) {
                       Toast.makeText(MainActivity.this, "Permission given", Toast.LENGTH_SHORT).show();
                       ArrayList<File> mysongs = fetchsong(Environment.getExternalStorageDirectory());
                       String [] songlist = new String[mysongs.size()];

                       for(int i=0;i<mysongs.size(); i++){songlist[i] = mysongs.get(i).getName().replace(".mp3", "");}
                        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,songlist);
                        listView.setAdapter(arrayAdapter);
                    }

                    @Override
                    public void onPermissionDenied(PermissionDeniedResponse response) {

                    }
                    @Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
                        token.continuePermissionRequest();
                    }
                })
                .check();
    }

    public ArrayList<File> fetchsong(File file) {
        ArrayList arrayList = new ArrayList();
        File[] songs= file.listFiles();
        if (songs==null){
            for (File myfile :songs){
                if (!myfile.isHidden() && myfile.isDirectory()){
                    arrayList.addAll(fetchsong(myfile));
                }
                else {
                    if (myfile.getName().endsWith("mp3") && myfile.getName().startsWith(".")){
                        arrayList.add(myfile);
                    }
                }
            }
        }
        return arrayList;
    }
}

我还添加<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>了我的 android 清单文件。

我也在implementation 'com.karumi:dexter:4.2.0'我的构建中添加了。.gradle 文件。

我尝试了很多网站上的很多东西。但不幸的是,我找不到任何有用的东西。

标签: javaandroid

解决方案


推荐阅读