0

以下のコードを実行しているときに2つの問題があります

  1. Mediaplayerは1つのメソッドであるため、停止していません。mp.isPlaying()は常にfalseを返します。
  2. 無効な状態の例外が発生することがあります。
try {
    String[] alerts = getResources().getStringArray(R.array.mp3files);
    int ch;
    StringBuffer fileContent = new StringBuffer("");
    FileInputStream fis = openFileInput("alertNo");
    byte[] buffer = new byte[1];
    int length;
    while ((length = fis.read(buffer)) != -1) {
        fileContent.append(new String(buffer));
    }
    String data = new String(fileContent);
    int position = Integer.parseInt(data);
    //m.setVolume(100, 100);
    if (m.isPlaying()) {
    m.stop();
    m.release();
    }
    AssetFileDescriptor descriptor = 
        MySettings.this.getAssets().openFd(alerts[position] + ".mp3");
    m.setDataSource(descriptor.getFileDescriptor(), 
        descriptor.getStartOffset(), descriptor.getLength());
    descriptor.close();
    m.prepare();
    m.start();
} catch (Exception e) {
    e.printStackTrace();
}
4

2 に答える 2

1

ドキュメントを確認してください。リリースが呼び出されると、オブジェクトを再利用する方法はありません。別のメディアプレーヤーを作成する必要があります。

引用。

 after release() is called, it is in the End state

MediaPlayerオブジェクトが終了状態になると、そのオブジェクトは使用できなくなり、他の状態に戻す方法はありません。

したがってm、新しいMediaplayerでオブジェクトを再初期化するか、リセットします

于 2012-09-18T07:59:18.313 に答える
0

私はnandeeshのおかげでこのようにそれをしました:)

try {
                MediaPlayer m = new MediaPlayer();
                String[] alerts = getResources().getStringArray(R.array.mp3files);
                int ch;
                StringBuffer fileContent = new StringBuffer("");
                FileInputStream fis = openFileInput("alertNo");
                byte[] buffer = new byte[1];
                int length;
                while ((length = fis.read(buffer)) != -1) {
                    fileContent.append(new String(buffer));
                }
                String data = new String(fileContent);
                int position = Integer.parseInt(data);
                //m.setVolume(100, 100);
                if (m.isPlaying()) {
                    m.stop();
                    m.release();
                    m = new MediaPlayer();
                }
                AssetFileDescriptor descriptor = MySettings.this.getAssets().openFd(alerts[position] + ".mp3");
                m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
                descriptor.close();

                m.prepare();
                m.start();
                CustomizeDialog dialog = new CustomizeDialog(MySettings.this,m);
                dialog.setTitle("Alert Test!");
                dialog.setMessage("Please Press \"Yes\" if you hear the alert sound now. if you don't here an alert, click \"No\" ");
                dialog.show();
            } catch (Exception e) {
                e.printStackTrace();
            }
于 2012-09-18T08:17:01.583 に答える