【发布时间】:2014-05-26 11:06:58
【问题描述】:
当我单击列表项时,我调用下一个活动并从哈希映射中获取 URL 并将其分配给播放器活动现在我希望媒体播放器在后台运行,这怎么可能?
Surah 类扩展自 Fragment
SurahlistView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Play_SuraData = data.get(position);
Intent i =new Intent(getActivity(), Player.class);
i.putExtra("PlayUrl", "one");
startActivity(i);
}
});
播放器.java
package com.example.quranpak;
import java.io.IOException;
import com.s3.helpers.DownloadImageTask;
import com.s3.helpers.ImagesCache;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.SurfaceView;
import android.view.View;
import android.widget.ImageView;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.VideoView;
public class Player extends Activity implements OnPreparedListener,MediaController.MediaPlayerControl{
// VideoView Video_Player;
//
// DisplayMetrics dm;
// SurfaceView sur_View;
ImageView Player_img;
ProgressBar Player_img_progress;
MediaController media_Controller;
MediaPlayer mplayer;
ProgressDialog pDialog;
private String Path, FrmDownload_Qariname, FrmDownload_Suraname, FrmFavourites_Qariname, FrmFavourites_Suraname;
ImagesCache cache;
Bitmap bitmap;
String Key;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
cache = ImagesCache.getInstance();
// Create a progressbar
pDialog = new ProgressDialog(Player.this);
// Set progressbar title
pDialog.setTitle("Audio Streaming");
// Set progressbar message
pDialog.setMessage("Buffering...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
// Show progressbar
pDialog.show();
Player_img = (ImageView) findViewById(R.id.Player_img);
Player_img_progress = (ProgressBar) findViewById(R.id.Player_img_progress);
Key = getIntent().getExtras().getString("PlayUrl");
mplayer = new MediaPlayer();
media_Controller = new MediaController(this);
try {
if(Key.equals("one"))
{
bitmap = cache.getImageFromWarehouse(SurahActivity.Play_SuraData.get("qari_image"));
Path = SurahActivity.Play_SuraData.get("download_url");
FrmDownload_Qariname = SurahActivity.Play_SuraData.get("qari_name");
FrmDownload_Suraname = SurahActivity.Play_SuraData.get("sura_name");
}
else
{
bitmap = cache.getImageFromWarehouse(FavouriteActivity.Play_FavouriteData.get("qari_image"));
Path = FavouriteActivity.Play_FavouriteData.get("url");
FrmDownload_Qariname = FavouriteActivity.Play_FavouriteData.get("qari_name");
FrmDownload_Suraname = FavouriteActivity.Play_FavouriteData.get("name");
}
mplayer.setDataSource(Path);
mplayer.prepare();
mplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mplayer.setLooping(true);
mplayer.start();
}
catch (IOException e)
{
e.printStackTrace();
}
mplayer.setOnPreparedListener(this);
if(bitmap != null)
{
Player_img_progress.setVisibility(View.GONE);
Player_img.setImageBitmap(bitmap);
}
else
{
Player_img_progress.setVisibility(View.VISIBLE);
Player_img.setImageBitmap(null);
DownloadImageTask downloadImageTask = new DownloadImageTask(cache, Player_img, 300, 300);
downloadImageTask.execute(SurahActivity.Play_SuraData.get("qari_image"));
}
((TextView)findViewById(R.id.Player_Suraname)).setText(FrmDownload_Suraname);
((TextView)findViewById(R.id.Player_Qariname)).setText("By " + FrmDownload_Qariname);
}
@Override
protected void onResume() {
mplayer.start();
super.onResume();
}
@Override
public void onPrepared(MediaPlayer mp)
{
media_Controller.setMediaPlayer(this);
media_Controller.setAnchorView(findViewById(R.id.main_audio_view));
handler.post(new Runnable()
{
public void run()
{
pDialog.dismiss();
media_Controller.setEnabled(true);
media_Controller.show();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
media_Controller.hide();
mplayer.stop();
// mplayer.release();
}
// @Override
// public void onBackPressed() {
//
// super.onBackPressed();
//
// getFragmentManager().popBackStack();
// }
// @Override
// protected void onStop() {
// super.onStop();
// media_Controller.hide();
// mplayer.stop();
// mplayer.release();
// }
@Override
public boolean onTouchEvent(MotionEvent event)
{
//the MediaController will hide after 3 seconds - tap the screen to make it appear again
media_Controller.show();
return false;
}
@Override
public boolean canPause()
{
return true;
}
@Override
public boolean canSeekBackward()
{
return true;
}
@Override
public boolean canSeekForward()
{
return true;
}
@Override
public int getAudioSessionId()
{
return 0;
}
@Override
public int getBufferPercentage()
{
return 0;
}
@Override
public int getCurrentPosition()
{
return mplayer.getCurrentPosition();
}
@Override
public int getDuration()
{
return mplayer.getDuration();
}
@Override
public boolean isPlaying()
{
return mplayer.isPlaying();
}
@Override
public void pause()
{
mplayer.pause();
// mplayer.release();
}
@Override
public void seekTo(int pos)
{
mplayer.seekTo(pos);
}
@Override
public void start()
{
mplayer.start();
}
}
【问题讨论】:
-
Activity 无法在后台运行。改用服务。
-
现在,尝试从
onPause()方法注释这行mplayer.pause();并再次运行。 -
这里的哪一个 onPause 方法只是 void pause 方法,如果我评论它,它的 Pause 按钮将不起作用 Kedarnath
-
如何使用服务而不是我不知道的活动... Kalpesh Patel
标签: android service android-mediaplayer