gpt4 book ai didi

android - 开始/停止按钮 radio 流服务

转载 作者:行者123 更新时间:2023-11-30 01:48:21 28 4
gpt4 key购买 nike

我有来自这个网站的 radio 流应用程序的代码 radio stream example ,但是当我想停止流时,它会重新启动。停止它的唯一方法是退出应用程序并通过“最近使用的应用程序”按钮或通知屏幕返回应用程序。

有人可以帮我处理代码吗?

流服务.java

package id.pratama.example.streamingaudio.service;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

import java.io.IOException;

import id.pratama.example.streamingaudio.MainActivity;
import id.pratama.example.streamingaudio.R;

/**
* Created by pratama on 4/22/14.
*/
public class StreamService extends Service implements
MediaPlayer.OnCompletionListener,
MediaPlayer.OnPreparedListener,
MediaPlayer.OnErrorListener,
MediaPlayer.OnBufferingUpdateListener {

/**
* for educational only
*/
// public static final String URL_STREAM = "http://jkt.jogjastreamers.com:8000/jisstereo?s=02766";

// radio UNISI
public static final String URL_STREAM = "http://202.162.32.23:8000";

// notification
private static final int NOTIFICATION_ID = 1;
private PhoneStateListener phoneStateListener;
private TelephonyManager telephonyManager;
private boolean isPausedInCall = false;
private NotificationCompat.Builder builder;

//intent
private Intent bufferIntent;

public static final String BROADCAST_BUFFER = "id.pratama.example.streamingaudio.broadcastbuffer";

private MediaPlayer mediaPlayer = new MediaPlayer();

@Override
public void onCreate() {
super.onCreate();
Log.d("create", "service created");

bufferIntent = new Intent(BROADCAST_BUFFER);

mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnBufferingUpdateListener(this);

mediaPlayer.reset();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("play", "play streaming");

telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_OFFHOOK:
case TelephonyManager.CALL_STATE_RINGING:
if (mediaPlayer != null) {
pauseMedia();
isPausedInCall = true;
}
break;
case TelephonyManager.CALL_STATE_IDLE:
if (mediaPlayer != null) {
if (isPausedInCall) {
isPausedInCall = false;
playMedia();
}
}
break;
}
}
};

telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);

initNotification();

mediaPlayer.reset();

/**
* play media
*/
if (!mediaPlayer.isPlaying()) {
try {
Log.d("streamm", "" + URL_STREAM);
mediaPlayer.setDataSource(URL_STREAM);

// sent to UI radio is buffer
sendBufferingBroadcast();

mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
Log.d("error", e.getMessage());
} catch (IllegalStateException e) {
Log.d("error", e.getMessage());
} catch (IOException e) {
Log.d("error", e.getMessage());
}
}

return START_STICKY;
}


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

@Override
public void onBufferingUpdate(MediaPlayer mediaPlayer, int i) {
}


@Override
public void onCompletion(MediaPlayer mediaPlayer) {
stopMedia();
stopSelf();
}


@Override
public boolean onError(MediaPlayer mediaPlayer, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
Toast.makeText(this, "Error not valid playback", Toast.LENGTH_SHORT).show();
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Toast.makeText(this, "Error server died", Toast.LENGTH_SHORT).show();
break;
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
Toast.makeText(this, "Error unknown", Toast.LENGTH_SHORT).show();
break;
}
return false;
}


@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// sent to UI, audio has buffered
sendBufferCompleteBroadcast();

playMedia();
}


private void pauseMedia() {
if (mediaPlayer.isPlaying())
mediaPlayer.pause();
}

private void playMedia() {
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
}
}

private void stopMedia() {
if (mediaPlayer.isPlaying())
mediaPlayer.stop();
}

/**
* sent buffering
*/
private void sendBufferingBroadcast() {
bufferIntent.putExtra("buffering", "1");
sendBroadcast(bufferIntent);
}

/**
* sent buffering complete
*/
private void sendBufferCompleteBroadcast() {
bufferIntent.putExtra("buffering", "0");
sendBroadcast(bufferIntent);
}


@Override
public void onDestroy() {
super.onDestroy();
Log.d("tag", "remove notification");
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}

if (phoneStateListener != null) {
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
}

cancelNotification();
}

/**
* show notificaiton
*/
private void initNotification() {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent intent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0);
builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Stream Radio")
.setContentText("895 JIZ fm");
builder.setContentIntent(intent);
builder.setOngoing(true);
notificationManager.notify(NOTIFICATION_ID, builder.build());

}

/**
* cancel notification
*/
private void cancelNotification() {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
builder.setOngoing(false);
}


}

主 Activity .java

package id.pratama.example.streamingaudio;

import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import id.pratama.example.streamingaudio.service.StreamService;
import id.pratama.example.streamingaudio.utils.Utils;


public class MainActivity extends ActionBarActivity implements View.OnClickListener {

private Intent serviceIntent;
private Button btnPlay;
private static boolean isStreaming = false;
private ProgressDialog pdBuff = null;
private boolean mBufferBroadcastIsRegistered;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btnPlay = (Button) findViewById(R.id.btnPlay);
btnPlay.setOnClickListener(this);

serviceIntent = new Intent(this, StreamService.class);
isStreaming = Utils.getDataBooleanFromSP(this, Utils.IS_STREAM);
if (isStreaming)
btnPlay.setText("Stop");
}


@Override
public void onClick(View view) {
if (view == btnPlay) {
Log.d("playStatus", "" + isStreaming);

if (!isStreaming) {
btnPlay.setText("Stop");
startStreaming();
Utils.setDataBooleanToSP(this, Utils.IS_STREAM, true);
} else {
if (isStreaming) {
btnPlay.setText("Start");
Toast.makeText(this, "Stop Streaming..", Toast.LENGTH_SHORT).show();
stopStreaming();
isStreaming = false;
Utils.setDataBooleanToSP(this, Utils.IS_STREAM, false);
}
}
}
}


@Override
protected void onPause() {
super.onPause();
if (mBufferBroadcastIsRegistered) {
unregisterReceiver(broadcastBufferReceiver);
mBufferBroadcastIsRegistered = false;
}

}

@Override
protected void onResume() {
super.onResume();
if (!mBufferBroadcastIsRegistered) {
registerReceiver(broadcastBufferReceiver, new IntentFilter(
StreamService.BROADCAST_BUFFER));
mBufferBroadcastIsRegistered = true;
}
}

private void startStreaming() {
Toast.makeText(this, "Start Streaming..", Toast.LENGTH_SHORT).show();
stopStreaming();
try {
startService(serviceIntent);
} catch (Exception e) {
}

}

private void stopStreaming() {
try {
stopService(serviceIntent);
} catch (Exception e) {

}
}

private BroadcastReceiver broadcastBufferReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent bufferIntent) {
showProgressDialog(bufferIntent);
}
};

private void showProgressDialog(Intent bufferIntent) {
String bufferValue = bufferIntent.getStringExtra("buffering");
int bufferIntValue = Integer.parseInt(bufferValue);
switch (bufferIntValue) {
case 0:
if (pdBuff != null) {
pdBuff.dismiss();
}
break;

case 1:
pdBuff = ProgressDialog.show(MainActivity.this, "",
"Streaming...", true);
break;
}
}
}

最佳答案

终于自己弄明白了!

编辑 MainActivity.java 并使用此代码

package id.pratama.example.streamingaudio;

import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import id.pratama.example.streamingaudio.service.StreamService;
import id.pratama.example.streamingaudio.utils.Utils;


public class MainActivity extends ActionBarActivity implements View.OnClickListener {

private Intent serviceIntent;
private Button btnPlay;
private static boolean isStreaming;
private ProgressDialog pdBuff = null;
private boolean mBufferBroadcastIsRegistered;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btnPlay = (Button) findViewById(R.id.btnPlay);
btnPlay.setOnClickListener(this);

serviceIntent = new Intent(this, StreamService.class);
isStreaming = Utils.getDataBooleanFromSP(this, Utils.IS_STREAM);
if (isStreaming)
btnPlay.setText("Stop");
}


@Override
public void onClick(View view) {
if (view == btnPlay) {
Log.d("playStatus", "" + isStreaming);

if (!isStreaming) {
btnPlay.setText("Stop");
startStreaming();
isStreaming = true;
Utils.setDataBooleanToSP(this, Utils.IS_STREAM, true);
} else {
if (isStreaming) {
btnPlay.setText("Start");
Toast.makeText(this, "Stop Streaming..", Toast.LENGTH_SHORT).show();
stopStreaming();
isStreaming = false;
Utils.setDataBooleanToSP(this, Utils.IS_STREAM, false);
}
}
}
}


@Override
protected void onPause() {
super.onPause();
if (mBufferBroadcastIsRegistered) {
unregisterReceiver(broadcastBufferReceiver);
mBufferBroadcastIsRegistered = false;
}

}

@Override
protected void onResume() {
super.onResume();
if (!mBufferBroadcastIsRegistered) {
registerReceiver(broadcastBufferReceiver, new IntentFilter(
StreamService.BROADCAST_BUFFER));
mBufferBroadcastIsRegistered = true;
}
}

private void startStreaming() {
Toast.makeText(this, "Start Streaming..", Toast.LENGTH_SHORT).show();
stopStreaming();
try {
startService(serviceIntent);
} catch (Exception e) {
}

}

private void stopStreaming() {
try {
stopService(serviceIntent);
} catch (Exception e) {

}
}

private BroadcastReceiver broadcastBufferReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent bufferIntent) {
showProgressDialog(bufferIntent);
}
};

private void showProgressDialog(Intent bufferIntent) {
String bufferValue = bufferIntent.getStringExtra("buffering");
int bufferIntValue = Integer.parseInt(bufferValue);
switch (bufferIntValue) {
case 0:
if (pdBuff != null) {
pdBuff.dismiss();
}
break;

case 1:
pdBuff = ProgressDialog.show(MainActivity.this, "",
"Streaming...", true);
break;
}
}
}

关于android - 开始/停止按钮 radio 流服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404388/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com