3
Мне нужно сделать выборщик файлов в моем приложении, попробовав сторонние библиотеки, которые не работают (без содержимого), я попытался реализовать его сам, и у меня есть такой же результат.Environment.getExternalStorageDirectory(). ListFiles() возвращает null
wierdest Дело в том, что
Environment.getExternalStorageDirectory().listFiles()
возвращает нулевое значение
вот мой код,
public class FilePickerActivity extends AppCompatActivity {
FilePickerActivity mActivity = this;
FilePickerAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_picker);
ListView listView = (ListView) findViewById(R.id.list);
mAdapter = new FilePickerAdapter(this, new File("/"));//Environment.getExternalStorageDirectory());
listView.setAdapter(mAdapter);
}
private class FilePickerAdapter extends ArrayAdapter<File> {
ArrayList<File> mDataset = new ArrayList<>();
Context context;
File rootFile;
public void explore(File file){
rootFile = file;
refresh();
}
public void refresh(){
mDataset.clear();
File[] list = rootFile.listFiles();
if (list != null) {
for (File file : list) {
if (!file.isHidden()) {
mDataset.add(file);
}
}
}
notifyDataSetChanged();
}
public boolean getHigher(){
rootFile = rootFile.getParentFile();
if(rootFile == null){
return false;
}
refresh();
return true;
}
public FilePickerAdapter(Context context,
File rootFile) {
super(context, R.layout.aaaaaaaaa_file_picker_list_item, new ArrayList<File>());
this.context = context;
this.rootFile = rootFile;
refresh();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getCount() {
return mDataset.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
convertView = LayoutInflater.from(context).inflate(R.layout.aaaaaaaaa_file_picker_list_item, parent, false);
}
final File itemFile = mDataset.get(position);
final String itemString = itemFile.getName();
((TextView) convertView.findViewById(R.id.textView)).setText(itemString);
ImageView iv = (ImageView) convertView.findViewById(R.id.iv);
if(itemFile.isDirectory()){
iv.setImageResource(R.drawable.ic_attachment_24dp);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
explore(itemFile);
}
});
} else {
iv.setImageResource(R.drawable.ic_arrow_vector);
}
return convertView;
}
}
@Override
public void onBackPressed() {
if(!mAdapter.getHigher())
super.onBackPressed();
}
}
Спасибо,
я проверить на эмулятор, и он работает правильно, проблема только с моим телефоном .. (нексус 5) –
Оказывается, что это право независимо от того, я попробовал другую библиотеку третьей стороны, что после спросив, разрешаю ли я моему приложению получать доступ к sdcard (даже если у меня есть разрешение, установленное в моем манифесте), хорошо отображался мой телефон. –