Android: 如何从Fragment中的MainActivity获取MediaPlayer对象?
Android: how to get a MediaPlayer object from the MainActivity in a Fragment?
我正在开发一个 android 应用程序并且我正在使用 NavigationDrawer
,只有一个 activity (MainActivity
) 和片段。
我在 ActionBar
上有一个广播直播按钮,所以我在 MainActivity
中为直播按钮制作了一个 MediaPlayer
的对象,它工作正常,现在我有一些声音文件在片段中,我想获取我在 MainActivity 中制作的 mediaPlayer
对象以便使用它。请注意,直播按钮始终在应用程序顶部可见,因此如果我在具有声音文件的片段中,我希望能够收听声音文件,如果我单击直播按钮,则声音文件将暂停,直播将开始。
这是我的代码:
这是MainActivity(只是相对的部分):
public class MainActivity extends ActionBarActivity {
private static final String RADIO_STREAM_URL= "http://198.178.123.23:8662/stream/1/;listen.mp3";
MediaPlayer mediaPlayer;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(RADIO_STREAM_URL);
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item != null )
{
if(item.getItemId() == android.R.id.home){
if (mDrawerLayout.isDrawerOpen(Gravity.END)){
mDrawerLayout.closeDrawer(Gravity.END);
} else {
mDrawerLayout.openDrawer(Gravity.END);
}
}else if(item.getItemId() == R.id.action_settings){
try {
mediaPlayer.prepareAsync();
} catch (IllegalStateException e) {
e.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
Log.e("ANA Radio","was playing");
}else{
Log.e("ANA Radio","was not playing");
mediaPlayer.start();
}
}
});
}
}
return false;
}
现在如何获取 Fragment 中的 mediaPlayer
对象?
在这里试试这个:
在您的片段中,您可以编写以下代码来获取 MediaPlayer 对象:
((MainActivity)getActivity()).mediaPlayer
另一个解决方案是,让您的 mediaPlayer 成为 class 的成员。要做到这一点,请执行以下操作:
public static MediaPlayer mediaPlayer;
我正在开发一个 android 应用程序并且我正在使用 NavigationDrawer
,只有一个 activity (MainActivity
) 和片段。
我在 ActionBar
上有一个广播直播按钮,所以我在 MainActivity
中为直播按钮制作了一个 MediaPlayer
的对象,它工作正常,现在我有一些声音文件在片段中,我想获取我在 MainActivity 中制作的 mediaPlayer
对象以便使用它。请注意,直播按钮始终在应用程序顶部可见,因此如果我在具有声音文件的片段中,我希望能够收听声音文件,如果我单击直播按钮,则声音文件将暂停,直播将开始。
这是我的代码: 这是MainActivity(只是相对的部分):
public class MainActivity extends ActionBarActivity {
private static final String RADIO_STREAM_URL= "http://198.178.123.23:8662/stream/1/;listen.mp3";
MediaPlayer mediaPlayer;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(RADIO_STREAM_URL);
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item != null )
{
if(item.getItemId() == android.R.id.home){
if (mDrawerLayout.isDrawerOpen(Gravity.END)){
mDrawerLayout.closeDrawer(Gravity.END);
} else {
mDrawerLayout.openDrawer(Gravity.END);
}
}else if(item.getItemId() == R.id.action_settings){
try {
mediaPlayer.prepareAsync();
} catch (IllegalStateException e) {
e.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
Log.e("ANA Radio","was playing");
}else{
Log.e("ANA Radio","was not playing");
mediaPlayer.start();
}
}
});
}
}
return false;
}
现在如何获取 Fragment 中的 mediaPlayer
对象?
在这里试试这个: 在您的片段中,您可以编写以下代码来获取 MediaPlayer 对象:
((MainActivity)getActivity()).mediaPlayer
另一个解决方案是,让您的 mediaPlayer 成为 class 的成员。要做到这一点,请执行以下操作:
public static MediaPlayer mediaPlayer;