#android
#Android
Вопрос:
public class MainActivity extends AppCompatActivity {
private ArrayList[] getFileList() {
ArrayList[] arr = new ArrayList[2];
ArrayList<String> files = new ArrayList<>();
ArrayList<String> infor = new ArrayList<>();
String sdcard_path = Environment.getExternalStorageDirectory().getAbsolutePath();
Log.d("TAG", sdcard_path);
File target_dic = new File(sdcard_path);
File[] target_files = target_dic.listFiles();
if(target_files.length != 0) {
for(File file : target_files) {
files.add(file.getName());
infor.add(file.length() "B");
}
}
arr[0] = files;
arr[1] = infor;
return arr;
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
private void setRecyclerView(ArrayList<String> list, ArrayList<String> list2) {
RecyclerView recyclerView = findViewById(R.id.recyclerView);
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(list, list2, getDeviceWidth(), MainActivity.this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(recyclerAdapter);
}
@Override
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initMenuButton();
setupPermission();
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
private void setupPermission() {
int chk = checkCallingOrSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (chk == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE }, 0);
return;
}
}
if(chk == PackageManager.PERMISSION_GRANTED) {
ArrayList[] arr = getFileList();
setRecyclerView(arr[0], arr[1]);
}
return;
}
@Override
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
Log.d("TAG", "권한결과 체크함수 호출됨.");
if(requestCode == 0 amp;amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
ArrayList[] arr = getFileList();
setRecyclerView(arr[0], arr[1]);
} else {
Toast.makeText(this, "권한을 설정해주세요.", Toast.LENGTH_SHORT).show();
finish();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.moonsung.todaymusic">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
По порядку это файлы Java и файлы манифеста.
Приложение, которое я создаю, — это приложение для потоковой передачи песен, и я пытался сначала перенести файлы и папки на sdcard. Однако функция .listFiles() продолжала возвращать значение null, и я понял, что это проблема с разрешением, и написал функцию, которая запрашивает разрешение, называемое setupPermission . Однако после того, как в начале появляется окно запроса разрешения, оно работает нормально после его разрешения, но сначала запуск приложения, предоставление разрешения, а затем запуск его со второго раза не работает должным образом. Если у меня уже есть разрешение read_external_storage, я просто загружаю список, но он не работает. В эмуляторе только файлы, которые существовали, когда разрешение было предоставлено в начале, были загружены правильно, а файлы, добавленные впоследствии, не могли быть восстановлены, а на мобильных телефонах по-прежнему возникает ошибка, которая возвращает значение null из listFiles() . Как я могу это исправить?
Комментарии:
1. Устройство Android 10?
2. Пожалуйста, удалите большую часть вашего кода. Почему вы должны беспокоить нас с помощью recyclerview, адаптера или цвета ваших кнопок?
3. Мне очень жаль. Ненужный код Java и код xml были удалены.
4. Резюмируя проблему еще раз, при первом запуске приложения и разрешении разрешения на чтение файлов списки файлов отображаются нормально, но когда вы запускаете приложение после этого, список файлов не отображается нормально, и функция .listFiles() возвращает null .
5. После этого, даже если я запускаю приложение, разрешение не исчезает и применяется как есть, поэтому последний if(chk == PackageManager. PERMISSION_GRANTED) {часть функции setupPermission выполняется нормально, но список файлов не загружается.