Android 在后台播放时音乐会停止。我不';I don’我不想把它当作一种服务,我有什么选择?
我正在开发一个音乐播放器应用程序,它可以很好地播放音乐,但问题是当它在后台播放时,它会在一段时间后停止……我在网上搜索了它,想知道如何解决这个问题,几乎所有的人都在使用服务而不是活动,我不想这样做,那么我该如何实现呢 这是我正在使用的代码Android 在后台播放时音乐会停止。我不';I don’我不想把它当作一种服务,我有什么选择?,android,android-music-player,Android,Android Music Player,我正在开发一个音乐播放器应用程序,它可以很好地播放音乐,但问题是当它在后台播放时,它会在一段时间后停止……我在网上搜索了它,想知道如何解决这个问题,几乎所有的人都在使用服务而不是活动,我不想这样做,那么我该如何实现呢 这是我正在使用的代码 public class NowPlaying extends Activity implements Serializable { static MediaPlayer mp =new MediaPlayer(); /*SeekBar
public class NowPlaying extends Activity implements Serializable {
static MediaPlayer mp =new MediaPlayer();
/*SeekBar songProgressBar = (SeekBar) findViewById(R.id.songProgressBar);
TextView songCurrentDurationLabel = (TextView) findViewById(R.id.songCurrentDurationLabel);
TextView songTotalDurationLabel = (TextView) findViewById(R.id.songTotalDurationLabel);
private Handler mHandler = new Handler();
private Utilities utils;
*/
@SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.now_playing);
Intent i = getIntent();
final int position=i.getIntExtra("Data2", 0);
final ArrayList<SongDetails> songs = getIntent().getParcelableArrayListExtra("Data1");
SongDetails songDetails = songs.get(position) ;
Button bfake=(Button) findViewById(R.id.bFake);
LinearLayout LL=(LinearLayout) findViewById(R.id.LL);
Button Pause=(Button)findViewById(R.id.bPlayPause);
Playservice(songs,position,0 );
bfake.setOnTouchListener(new OnSwipeTouchListener()
{ int z=0;
public void onSwipeRight() {
z=z-1;
Playservice(songs,position,z );
}
public void onSwipeLeft() {
z=z+1;
Playservice(songs,position,z );
}
public void onSwipeBottom() {
mp.stop();
}
});
LL.setOnTouchListener(new OnSwipeTouchListener() {
public void onSwipeBottom() {
mp.stop();
}
});
Pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{if(mp.isPlaying())
mp.pause();
else
mp.start();
}
});
}
private void Playservice( ArrayList<SongDetails> songs, int position, int i )
{
/* Utilities utils = new Utilities();
songProgressBar.setOnSeekBarChangeListener((OnSeekBarChangeListener) this); // Important
*///mp.setOnCompletionListener((OnCompletionListener) this);
try {
String ab=songs.get(position+i).getPath2().toString();
if(mp.isPlaying())
{ mp.stop();
}
mp.reset();
mp.setDataSource(ab) ;
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
public类NowPlaying扩展活动实现可序列化{
静态MediaPlayer mp=新MediaPlayer();
/*SeekBar songProgressBar=(SeekBar)findViewById(R.id.songProgressBar);
TextView-songCurrentDurationLabel=(TextView)findViewById(R.id.songCurrentDurationLabel);
TextView-songTotalDurationLabel=(TextView)findViewById(R.id.songTotalDurationLabel);
私有处理程序mHandler=新处理程序();
私人公用事业和公用事业;
*/
@SuppressLint(“新API”)
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局,正在播放);
Intent i=getIntent();
最终int位置=i.getIntExtra(“数据2”,0);
最终ArrayList歌曲=getIntent().getParcelableArrayListExtra(“数据1”);
SongDetails SongDetails=songs.get(位置);
按钮bfake=(按钮)findViewById(R.id.bfake);
LinearLayout LL=(LinearLayout)findViewById(R.id.LL);
按钮暂停=(按钮)findViewById(R.id.bPlayPause);
播放服务(歌曲,位置,0);
bMake.setOnTouchListener(新的OnSwipeTouchListener()
{int z=0;
公共权利{
z=z-1;
播放服务(歌曲、位置、z);
}
公共void onswitpeleft(){
z=z+1;
播放服务(歌曲、位置、z);
}
公共void onsweepbottom(){
mp.stop();
}
});
LL.setOnTouchListener(新的OnSwipeTouchListener(){
公共void onsweepbottom(){
mp.stop();
}
});
Pause.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{if(mp.isPlaying())
mp.pause();
其他的
mp.start();
}
});
}
私有void播放服务(ArrayList歌曲,内部位置,内部i)
{
/*实用程序utils=新的实用程序();
songProgressBar.setOnSeekbarchaneListener((OnSeekbarchaneListener)this);//重要
*///mp.setOnCompletionListener((OnCompletionListener)this);
试一试{
String ab=songs.get(位置+i.getPath2().toString();
if(mp.isPlaying())
{mp.stop();
}
mp.reset();
mp.setDataSource(ab);
mp.prepare();
mp.start();
}捕获(IllegalArgumentException e){
e、 printStackTrace();
}捕获(安全异常e){
e、 printStackTrace();
}捕获(非法状态){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
您必须使用a来完成此操作。后台活动或后台服务被Android杀死的概率非常高。这是您观察到的问题。您必须使用a来完成此操作。后台活动或后台服务被Android杀死的概率非常高。这就是您观察到的问题。我面临同样的问题,我所做的是在ServiceOnCreate方法中将服务设置在前台
startForeground(R.string.app_name, aNotification);
我面临同样的问题,我所做的是在ServiceOnCreate方法中将服务设置在前台
startForeground(R.string.app_name, aNotification);
因为这将使我的代码复杂化…因为许多方法在服务中不受支持,例如setContentView()等等…你知道还有其他选择吗?错!!你的应用程序会更安全,音乐播放器应该始终由前台服务管理,并发出停止通知。而且服务使用起来并不复杂。抱歉,这是正确的选择;/@Yume117但是如何正常(专业的)音乐播放器工作??它们看起来像活动……有适当的用户界面和all@AnkitSrivastava您的活动应与服务保持持续联系。“专业音乐应用程序”当然,它们只适用于服务,当然它们有适当的用户界面,但这与服务有关。它们处于活动状态,您只需使用按钮和搜索键即可控制,服务只允许您在后台安全播放音乐。而StartForeground则使服务可由应用程序之外的用户管理,因为这将使cate my code…因为服务中不支持许多方法,例如setContentView()等等…你知道还有其他选择吗?错!!你的应用程序会更安全,音乐播放器应该始终由前台服务管理,并发出停止通知。而且服务使用起来并不复杂。抱歉,这是正确的选择;/@Yume117但是如何正常(专业的)音乐播放器工作??它们看起来像活动……有适当的用户界面和all@AnkitSrivastava您的活动应与服务保持持续联系。“专业音乐应用程序”当然,它们只适用于服务,当然它们有适当的用户界面,但这与服务有关。它们处于活动状态,您需要按钮和搜索栏来控制,服务只允许您在后台安全地播放音乐。而StartForeground使服务可由应用程序之外的用户管理我可以使用setContentView吗()在这种服务中?不,在