2016-06-30 14 views
0

Ich möchte eine Ausnahme abfangen, wenn die vom Mediaplayer gelesene Audiodatei nicht existiert. Von einem URI, habe ich den folgenden Code bekommt:MediaPlayer.setDataSource() fängt keine Ausnahme

try{player.setDataSource(getApplicationContext(), uri); } 

    catch (IllegalStateException e) {Log.e("MUSIC", "Error setting data source", e);} 
    catch (IOException e) {Log.e("MUSIC", "Error setting data source", e);} 
    catch(IllegalArgumentException e){ Log.e("MUSIC", "Error setting data source", e); } 
    catch(SecurityException e){ Log.e("MUSIC", "Error setting data source", e); } 

player.prepareAsync(); 

Allerdings scheint es die Ausnahme nie angehoben wird, sogar mit einem schlechten URI. Ich vermisse hier wahrscheinlich etwas Offensichtliches, aber was ist der beste Weg, um eine Ausnahme zu fangen, um das Lesen nicht zu starten, wenn das URI nicht existiert?

+0

Bitte kommentieren oder erklären, wenn Sie eine Frage abstimmen – PatriceG

+0

@Mishra Was meinst du? Es gibt keine Ausnahme. – PatriceG

+0

Warum soll es eine Ausnahme auslösen? Was ist das Problem mit dem aktuellen Code? Warum überprüfen Sie nicht einfach vorher, ob die Datei existiert? –

Antwort

0

Ich fand schließlich eine Lösung, dank des Kommentars von J, um zu testen, ob die Datei existiert. Da sich die Datei in meinem Rohordner befindet, ist es ein wenig schwierig. Ich habe this verwendet, um es zu lösen.

Am Ende, mein Code wie folgt aussieht:

file_name ="name_of_the_ressource_whitout_directory_or_extension"; 
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/raw/" + file_name); 

int checkExistence = getResources().getIdentifier(file_name, "raw", getPackageName()); 

if (checkExistence != 0){ 

     // The audio file exists 

     try{ 
      player.setDataSource(getApplicationContext(), uri); 
      player.prepareAsync(); 
     } 

     catch (IllegalStateException e) {Log.e("MUSIC SERVICE", "Error setting data source", e);} 
     catch (IOException e) {Log.e("MUSIC SERVICE", "Error setting data source", e); } 
     catch(IllegalArgumentException e){ Log.e("MUSIC SERVICE", "Error setting data source", e); } 
     catch(SecurityException e){ Log.e("MUSIC SERVICE", "Error setting data source", e); } 

Bitte beachte, dass ich über die Nützlichkeit des try/catch jetzt nicht sicher bin.