1

そこで、モバイル プログラミング クラス用のアプリケーションを作成していますが、その「再生」部分で問題が発生しています。いくつかのコンテキストを提供するために: 基本的に、事前定義されたソースから mp3 をダウンロードし、その mp3 を再生する基本的なオーディオ プレーヤーを作成する必要があります。ダウンロード サービスを正しくセットアップしましたが、ファイルを再生するためのコードが機能しない理由がわかりません。私のmain.javaには、たくさんのアノンがあります。UI のボタンの onclick リスナーと、どのボタンがクリックされたかを把握するためのメディア プレーヤー サービスの switch ステートメント。

主なアクティビティからの再生オプションの onclick は次のとおりです。

play.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), PlayService.class);
            File path = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
            File file = new File(path, "Bob_Marley-Jammin.mp3");
            intent.putExtra("path", file);
            intent.putExtra("key", 0);
            startService(intent);               
        }
    });

そして、ここにonclickのダウンロードがあります:

 download.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), DownloadService.class);
            intent.putExtra("url", "https://dl.dropbox.com/s/6e6pn43916nl10i/Bob_Marley-Jammin.mp3?dl=1");
            startService(intent);               
        }
    });

ここに私のPlayServiceがあります:

package com.connor.black;

import java.io.IOException;

import android.app.IntentService;
import android.content.Intent;
import android.media.MediaPlayer;

public class PlayService extends IntentService{

public PlayService() {
    super("PlayService");
}

public MediaPlayer mMediaPlayer;
public String path;

@Override
protected void onHandleIntent(Intent intent) {
    path = intent.getStringExtra(path);
    int key = intent.getIntExtra("key", 0);
    mMediaPlayer = new MediaPlayer();

    switch (key) {
    case 0: //Play
        if (mMediaPlayer.isPlaying())
            break;
        else{
            try {
                mMediaPlayer.setDataSource(path);
            } catch (IllegalArgumentException e1) {
                e1.printStackTrace();
            } catch (SecurityException e1) {
                e1.printStackTrace();
            } catch (IllegalStateException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            try {
                mMediaPlayer.prepare();
            } catch (IllegalStateException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
                mMediaPlayer.start();
        }
        break;
    case 1: //Pause
        if(mMediaPlayer.isPlaying())
            mMediaPlayer.pause();
        break;
    case 2: //Stop
        if(mMediaPlayer.isPlaying()){
            mMediaPlayer.pause();
            mMediaPlayer.seekTo(0);
        }
        break;
    default:
        break;
    }

}

}

基本的にファイルは正しくダウンロードされますが、「再生」ボタンを押しても何も起こりません。

4

1 に答える 1

1

あなたの関数は呼び出されていますか?Log.d を使用して確認します。mp3へのパスは正しいですか?

次の小さなスニペットは MP3 を再生します (ファイルへのパスを変更します)

package com.aplayer;

import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;

public class APlayerActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        MediaPlayer mMediaPlayer = new MediaPlayer();

        Uri data;
        data = Uri.parse("/sdcard/jazz.mp3");

        mMediaPlayer = MediaPlayer.create(getBaseContext(), data);
        mMediaPlayer.setLooping(false); // Set looping
        mMediaPlayer.start();
}

}

于 2012-06-12T01:26:31.670 に答える