In der folgenden Code, getInfoFromDevice
wird nicht ausgeführt, ich versuchte auch mit einem Log.d()
, aber es könnte nicht weiter helfen.Android: Funktion läuft nicht mit Laufzeitberechtigungen in Android
Im Code verwende ich Laufzeitberechtigungen, um zu überprüfen, ob der Benutzer die Berechtigung zum Zugriff auf externen Speicher gewährt hat, und wenn ja, wird die Funktion getInfoFromDevice()
aufgerufen. Ich bin mir nicht sicher, ob die Platzierung der Funktion korrekt ist oder nicht? Aber diese Funktion wird nicht ausgeführt. Was könnte der Grund sein?
Es sind keine Störungen wirft,
public class MainActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback {
ArrayList<String> listOfSongs = new ArrayList<String>();
ListView liststructure;
final private int REQUEST_CODE_ASK_PERMISSIONS = 123;
String MUSIC_STRING = MediaStore.Audio.Media.IS_MUSIC + "!=0";
String[] STAR = {"*"};
String orderColumns = MediaStore.Audio.AudioColumns.TITLE + " COLLATE LOCALISED ASC";
private final int REQUEST_GRANTED_BY_USER = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermissions();
liststructure = (ListView) findViewById(R.id.listView);
SongsList list = new SongsList(MainActivity.this, listOfSongs);
liststructure.setAdapter(list);
}
private void checkPermissions() {
int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_GRANTED_BY_USER);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if(requestCode == REQUEST_GRANTED_BY_USER)
{
getInfoFromDevice();
} else {
// Permission Denied
Toast.makeText(MainActivity.this, "EXTERNAL_STORAGE Denied", Toast.LENGTH_SHORT)
.show();
}
}
void getInfoFromDevice() {
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, STAR, MUSIC_STRING, null, null);
if (cursor != null)
{
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
String albumID = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
listOfSongs.add(album + " " + name + " " + albumID);
} while (cursor.moveToNext());
}
}
}
}
Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
EDIT 1
Der Code für MP3-Dateien mit Hilfe von MediaStore
Bibliothek aussehen wird und prüft, ob es eine Berechtigung hat, externen Speicher zuzugreifen, und wenn ja, es wird die Funktion getInfoFromDevice()
Ehrfürchtig arbeitete diese wie ein Zauber. –
Warum überprüfen wir am Ende die Berechtigungen? –
vor Show-Erlaubnisdialog. Ermöglichen, dass die Aktivität beendet wird (Laden von Ansichten auf dem Bildschirm). Deshalb nur. –