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吗()在这种服务中?不,在