0

みんな私は自分のアプリでオーディオモジュールに取り組んでいるので、サービス付きの簡単なオーディオデモを作成しました。

その動作までPlay- Pause-Playing in Backgroundしかし、問題は奇妙です。

アプリを起動するだけで、次のような2つのボタンを追加しました

  • Play/Pause(状態によってキャプションが変わります)

  • stop(サービスを停止するには)

今私が言ったように、私play-pause & Stopは完全に機能していますが、クリックした後にオーディオを再度再生しようとするstopと、問題が発生しますStart

Error : 05-01 13:37:42.671: E/start(8096): java.lang.IllegalStateException

Audio_Activity.java

public class Audio_Activity extends Activity {
  
    private static final String TAG = "ServicesDemo";
    public static Button play_pause;
    public static Button buttonStop;
    Audio_Service ms;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ms = new Audio_Service();
        play_pause = (Button) findViewById(R.id.play_pause);
        buttonStop = (Button) findViewById(R.id.buttonStop);

        play_pause.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if (isMyServiceRunning()) {
                        ms.play_pause();
                    } else {
                        startService(new Intent(Audio_Activity.this,
                                Audio_Service.class));
                        play_pause.setText("Pause");
                    }
                }
            });

        buttonStop.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if (isMyServiceRunning()) {
                        ms.stop_audio();
                        stopService(new Intent(Audio_Activity.this,
                                Audio_Service.class));
                        play_pause.setText("Play");
                    } else {
                        stopService(new Intent(Audio_Activity.this,
                                Audio_Service.class));
                        play_pause.setText("Play");
                    }
                }

            });

    }

    public boolean isMyServiceRunning() {
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (RunningServiceInfo service: manager
            .getRunningServices(Integer.MAX_VALUE)) {
            if (Audio_Service.class.getName().equals(
                    service.service.getClassName())) {
                return true;
            }
        }
        return false;
    }
}

Audio_Service.java

public class Audio_Service extends Service implements OnErrorListener,
OnCompletionListener, OnPreparedListener {

    public static MediaPlayer player = new MediaPlayer();
    Audio_Activity ac = new Audio_Activity();

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {

        Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();

    }

    @Override
    public void onDestroy() {
        try {
            Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG)
                .show();
        } catch (Exception e) {

            Log.e("ONdistroy", "" + e);
        }
    }

    @Override
    public void onStart(Intent intent, int startid) {
        Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();

        try {
            Log.e("player_status", "" + player);
            String url = "MY_WEB_URL";
            player.setAudioStreamType(AudioManager.STREAM_MUSIC);
            player.reset();
            player.setDataSource(url);
            player.prepareAsync();
            player.setOnPreparedListener(this);
            player.setOnErrorListener(this);
            player.setOnCompletionListener(this);

        } catch (Exception e) {
            // TODO: handle exception
            Log.e("start", "" + e);
        }
        // player.start();
    }

    public void play_pause() {
        try {
            if (player != null) {
                if (player.isPlaying()) {
                    ac.play_pause.setText("Play");
                    player.pause();
                } else {
                    ac.play_pause.setText("Pause");
                    player.start();

                }
            }
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("play_pause", "" + e);
        }
    }

    public void stop_audio() {
        try {
            if (player != null) {
                if (player.isPlaying()) {
                    ac.play_pause.setText("Play");
                    player.stop();
                    player.release();

                } else {
                    ac.play_pause.setText("Play");
                    player.release();

                }
            }
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("stop_service", "" + e);
        }
    }

    public void cleanUp() {

        if (player != null) {
            player.stop();
            player = null;
            player.release();
        }

    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        try {
            Log.d("complete", "called...........");

            player.stop();
            player.release();
            player = null;
            stopService(new Intent(this, Audio_Service.class));
            ac.play_pause.setText("Play");

        } catch (Exception e) {
            // TODO: handle exception
            Log.e("complete", "" + e);
        }

    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        // TODO Auto-generated method stub
        try {
            player.stop();
            player.release();
            player = null;

            // mp.reset();
            ac.play_pause.setText("Play");
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("onError", "" + e);
        }

        return false;
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        // TODO Auto-generated method stub
        try {
            player.start();
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("onPrepare", "" + e);
        }
    }

}

Manifestファイルに以下のものを追加しました

<uses-permission android:name="android.permission.INTERNET"/>
<service 
 android:name=".Audio_Service" 
 android:enabled="true" />

アップデート

設定する必要がある理想的な状態でオーディオを再生できることはわかっていますが、どこにあるのかreset();わかりません。onDestroy;cleanUp()stop_audio()onStart()NullpointerException

みんな私を助けてください。このエラーは、過去 2 日間フォームを取得しています。私が間違っている場合は修正してください。

戦車の皆さん、私の質問に時間を割いてください。

4

3 に答える 3

3

サービスを実行し、Binder を使用してサービスと通信するには、startService() を使用する必要があります。これは通常のオブジェクトではありません。Android OS に認識させる必要があり、期待どおりに動作する必要があります。

http://developer.android.com/reference/android/app/Service.html

自分でインスタンスを作成したり、そのメソッドを直接呼び出したりしないでください。

于 2013-05-01T08:36:26.397 に答える
1

私は5分後に解決策を得ました.私はばかげた間違いをしました.私は追加するのを忘れていました.player = null;

このコード全体はエラーなしで完全に機能していますが、開発者 (販売者) の 1 人もこれを参照することを提案しています。私もそのように実装しており、それも完全に機能しています。

public void stop_audio() {
     try {
         if (player != null) {
             if (player.isPlaying()) {
                 ac.play_pause.setText("Play");
                 player.stop();
                 player.release();
                 player = null; // forgot this statement  

             } else {
                 ac.play_pause.setText("Play");
                 player.release();
                 player = null; // forgot this statement  

             }
         }
     } catch (Exception e) {
         // TODO: handle exception
         Log.e("stop_service", "" + e);
     }
 }
于 2013-05-01T12:43:04.690 に答える
0

あなたはオーディオの再生のために停止しようとします

try {

    player.reset();
    player.setDataSource(url);
    player.prepare();
    player.seekTo(0);

} catch (IllegalArgumentException e1) {
    e1.printStackTrace();
} catch (SecurityException e1) {
    e1.printStackTrace();
} catch (IllegalStateException e1) {
    e1.printStackTrace();
} catch (IOException e1) {
    e1.printStackTrace();
}
player.start();
于 2013-05-01T11:33:45.133 に答える