2

コンテンツ プロバイダー データベースに保存されている mp3 オーディオ ファイルのパス名を取得するコードのセクションを次に示します。次に、このパス名を使用して mp3 ファイルをロードし、再生を開始します。問題は、別のパス名を取得して一時停止または再生を押すと、新しいファイルではなく、同じ古いオーディオ ファイルが再生され続けることです。この問題を解決する最善の方法は何ですか?

      String pathName; // pathname of audio file stored in SD card
      String selection = MediaStore.Images.Media.DATA + "='" + pathName +"'";
      String[] projection = { MediaStore.Images.Media.LATITUDE };
      cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, null, null);

      if(cursor!=null){
         cursor.moveToFirst();
        }
        musicName = (String) cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.LATITUDE));

         Toast.makeText(AudioService.this, "from AUDIOSERVICE CLASS music name: " + musicName, Toast.LENGTH_SHORT).show();

         cursor.close();    

         player.setDataSource(musicName);

        player.prepare();

        player.start();

        }
4

1 に答える 1

0

パスが同じかどうかを確認してから同じファイルをもう一度再生し、ファイル パスが異なる場合は、最初にメディアプレーヤーをリセットしてから新しいファイルを再生し、コードを次のように変更します。

      String pathName=""; // pathname of audio file stored in SD card
       public static String musicName="";
      String selection = MediaStore.Images.Media.DATA + "='" + pathName +"'";
      String[] projection = { MediaStore.Images.Media.LATITUDE };
      cursor = getContentResolver().query(MediaStore.Images.
             Media.EXTERNAL_CONTENT_URI, projection, selection, null, null);

      if(cursor!=null){
         cursor.moveToFirst();
        }

if(musicName.length()==0){
         musicName = (String) cursor.getString(cursor.getColumnIndex(
                                      MediaStore.Images.Media.LATITUDE));

         Toast.makeText(AudioService.this, 
                                    "from AUDIOSERVICE CLASS music name:
                                      " + musicName, Toast.LENGTH_SHORT).show();

         cursor.close();    

         player.setDataSource(musicName);

        player.prepare();

        player.start();

  }
else{
 String musicNametemp = (String) cursor.getString(cursor.getColumnIndex(
                                          MediaStore.Images.Media.LATITUDE));

if(musicNametemp.equals(musicName)){

///play old music here
}

else{
//reset mediaplayer here

if(player !=null){
 player.reset();
 player.release();
 player = new MediaPlayer();

}
cursor.close();    
musicName=musicNametemp;
player.setDataSource(musicName);

player.prepare();

player.start();
}

}
于 2012-12-18T01:30:17.353 に答える