-3

这是我的主要活动,实际上是一个选项卡活动。我正在选择歌曲列表,我正在尝试在下面给出的活动中播放广播。

public class MainActivity extends TabActivity {
String[] actions = new String[] { "Tune-Up", "About Us", "Like-Us",
        "Other", "Exit" };
Spinner country_list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);


    TabHost tabHost = getTabHost();
    TabSpec allcallspec = tabHost.newTabSpec("listner");
    allcallspec.setIndicator("listener");
    Intent allIntent = new Intent(this, Tab_Listner.class);
    allcallspec.setContent(allIntent);

    // Tab for recived call
    TabSpec recivespec = tabHost.newTabSpec("Like");
    // setting Title and Icon for the Tab
    recivespec.setIndicator("Like");
    Intent reciveIntent = new Intent(MainActivity.this, Tab_Like.class);
    recivespec.setContent(reciveIntent);

    TabSpec recivespec1 = tabHost.newTabSpec("Categery");
    // setting Title and Icon for the Tab
    recivespec1.setIndicator("CateGories");
    Intent reciveIntent1 = new Intent(MainActivity.this,
            Category_name.class);
    recivespec1.setContent(reciveIntent1);

    tabHost.addTab(recivespec);
    tabHost.addTab(allcallspec); // Adding photos tab
    // Adding songs tab

    tabHost.addTab(recivespec1); // Adding songs tab

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // MenuItem mainMenuSpinner = menu.findItem( R.id.menu_main_spinner);
    // setupMainMenuSpinner( mainMenuSpinner );
    int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    Log.i("Device Versoin is", "" + currentapiVersion);
    if (currentapiVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        ActionBar actionBar = getActionBar();

        getMenuInflater().inflate(R.menu.mainactivity, menu);

        Log.i("Android Version is", "Belove Froyo Action Bar Not Displayed");
        MenuItem statusSpinner = menu.findItem(R.id.menu_status_spinner);
        setupStatusSpinner(statusSpinner);
    }

    return super.onCreateOptionsMenu(menu);
}

private void setupStatusSpinner(MenuItem item) {
    View view = item.getActionView();
    if (view instanceof Spinner) {
        Spinner spinner = (Spinner) view;
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                getBaseContext(),
                android.R.layout.simple_spinner_dropdown_item, actions);

        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                switch (arg2) {
                case 1:
                    Log.i("About US", "Go");
                    startActivity(new Intent(MainActivity.this,
                            About_Us.class));
                    break;
                case 2:
                    String url = "https://www.facebook.com/musicbreeds";
                    Intent i = new Intent(Intent.ACTION_VIEW);
                    i.setData(Uri.parse(url));
                    startActivity(i);
                    break;
                case 3:
                    Log.i("Other", "Go");
                    startActivity(new Intent(MainActivity.this, Other.class));
                    break;
                case 4:
                    Log.i("Exit", "unSuccess");
                    System.out.print("not.......................");
                    System.exit(0);

                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
    }
    TextView tv_radio_name = (TextView) findViewById(R.id.tv_play_radio_name);
    tv_radio_name.setText(Tab_Listner.name);
}

}

Play_Radio activity, 在这个活动中,我播放和暂停歌曲。我想在底部有播放/暂停按钮MainActivity来停止和播放当前歌曲。

public class Play_Radio extends Activity {
private ImageView playButton;
private TextView textStreamed, tv_radio_name, tv_radio_cat;
private boolean isPlaying;
private static StreamingMediaPlayer audioStreamer;
private AudioManager audioManager = null;
ImageView iv_like;
Dialog rankDialog;
RatingBar ratingBar, pre_rating;
float cus_rating;
AdView adView;
Dialog dialog;
public static String name, rating, like, radio_url, id, listner, image;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
    setContentView(R.layout.play_radio);

    if (audioStreamer != null) {
        try {
            Log.i("Already ply", "Succss");
            audioStreamer.stop();

        } catch (Exception e) {
        }
    } else {
        Log.i("First time", "Play");

    }
    initControls();

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    Log.i("On Pause is call", "Succcess");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    Log.i("Device Versoin is", "" + currentapiVersion);
    if (currentapiVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        ActionBar actionBar = getActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        getMenuInflater().inflate(R.menu.main, menu);
        Log.i("Android Device above", "Home Enbled");
    }

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub

    switch (item.getItemId()) {
    case android.R.id.home:
        onBackPressed();
        return true;
    case R.id.home:
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        Log.i("Home", "Press");
        return true;

    }
    return super.onOptionsItemSelected(item);
}

private void initControls() {
    iv_like = (ImageView) findViewById(R.id.iv_activity_like);
    iv_like.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Vibrator v1 = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            v1.vibrate(40);
            Toast.makeText(getApplicationContext(),
                    "Thanks For like Our Station", Toast.LENGTH_LONG)
                    .show();

        }
    });
    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    textStreamed = (TextView) findViewById(R.id.text_kb_streamed);

    playButton = (ImageView) findViewById(R.id.imageView1);
    playButton.setEnabled(false);
    playButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Log.i("Click sadg   ", "success");

            Vibrator v1 = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            v1.vibrate(40);
            if (audioStreamer.getMediaPlayer().isPlaying()) {
                Log.i("play ", "success");
                audioStreamer.getMediaPlayer().pause();
                playButton.setImageResource(R.drawable.play_radio_play);
            } else {
                Log.i("pause", "success");
                audioStreamer.getMediaPlayer().start();
                audioStreamer.startPlayProgressUpdater();
                playButton.setImageResource(R.drawable.play_radio_pause);
            }
            isPlaying = !isPlaying;
        }
    });

    // rating radio sation

    ImageView rankBtn = (ImageView) findViewById(R.id.iv_activity_rating);
    rankBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            rankDialog = new Dialog(Play_Radio.this,
                    R.style.FullHeightDialog);
            rankDialog.setContentView(R.layout.rating_bar);
            rankDialog.setCancelable(true);
            ratingBar = (RatingBar) rankDialog
                    .findViewById(R.id.dialog_ratingbar);
            float userRankValue = 0;
            // ratingBar.setRating(userRankValue);
            ratingBar
                    .setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
                        @Override
                        public void onRatingChanged(RatingBar ratingBar,
                                float rating, boolean fromUser) {
                            // TODO Auto-generated method stub
                            cus_rating = rating;

                        }
                    });

            Button updateButton = (Button) rankDialog
                    .findViewById(R.id.rank_dialog_button);
            updateButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(Play_Radio.this,
                            "Thanks For Rating Our Stations",
                            Toast.LENGTH_LONG).show();
                    rankDialog.dismiss();
                }
            });
            // now that the dialog is set up, it's time to show it
            rankDialog.show();
        }
    });

    String urlstring2 = Tab_Listner.radio_url;
    Toast.makeText(Play_Radio.this, "Please Wait...", Toast.LENGTH_LONG)
            .show();

    startStreamingAudio(urlstring2);
    tv_radio_cat = (TextView) findViewById(R.id.tv_play_radio_cat);
    tv_radio_name = (TextView) findViewById(R.id.tv_play_radio_name);
    tv_radio_name.setText(Tab_Listner.name);
    pre_rating = (RatingBar) findViewById(R.id.ratingBar1);
    pre_rating.setRating(Float.parseFloat(Tab_Listner.rating));
}
private void startStreamingAudio(String urlstring) {
    try {
        dialog = new Dialog(Play_Radio.this,
                android.R.style.Theme_Translucent_NoTitleBar);
        dialog.setContentView(R.layout.progress_layout);
        dialog.setTitle("loading...");
        dialog.show();
        ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
        if (audioStreamer != null) {
            audioStreamer.interrupt();
        }
        audioStreamer = new StreamingMediaPlayer(this, textStreamed,
                playButton, progressBar, dialog);
        audioStreamer.startStreaming(urlstring, 5208, 216);

    } catch (Exception e) {
        Log.e(getClass().getName(), "Error starting to stream audio.", e);
    }

}

public void onItemSelected(AdapterView parent, View v, int position, long id) {
    mSwitcher.setImageResource(mImageIds[position]);
}

public void onNothingSelected(AdapterView parent) {
}

public View makeView() {
    ImageView i = new ImageView(this);
    i.setBackgroundColor(0xFF000000);
    i.setScaleType(ImageView.ScaleType.FIT_CENTER);
    i.setLayoutParams(new ImageSwitcher.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    return i;
}

private ImageSwitcher mSwitcher;

public class ImageAdapter extends BaseAdapter {
    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView i = new ImageView(mContext);

        i.setImageResource(mThumbIds[position]);
        i.setAdjustViewBounds(true);
        i.setLayoutParams(new Gallery.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        i.setBackgroundResource(R.drawable.picture_frame);
        return i;
    }

    private Context mContext;

}

private Integer[] mThumbIds = { R.drawable.calculator, R.drawable.calendar,
        R.drawable.camera };

private Integer[] mImageIds = { R.drawable.calculator, R.drawable.calendar,
        R.drawable.camera };

}

我已经在 playradio 活动及其工作中添加了播放/暂停按钮,但我想在 mainactivity 上播放暂停按钮以开始和停止播放已经播放到无线电活动中的歌曲

 public class StreamingMediaPlayer {
private static final int INTIAL_KB_BUFFER = 96 * 10 / 8;// assume
// 96kbps*10secs/8bits
// per byte

private TextView textStreamed;

private ImageView playButton;

private Dialog dialog;
private ProgressBar progressBar;
// Track for display by progressBar
private long mediaLengthInKb, mediaLengthInSeconds;

private int totalKbRead = 0;

// Create Handler to call View updates on the main UI thread.
private final Handler handler = new Handler();

private MediaPlayer mediaPlayer;

private File downloadingMediaFile;

private boolean isInterrupted;

private Context context;

private int counter = 0;

public StreamingMediaPlayer(Context context, TextView textStreamed,
        ImageView playButton, ProgressBar progressBar, Dialog dialog) {
    this.context = context;
    this.textStreamed = textStreamed;
    this.playButton = playButton;
    this.progressBar = progressBar;
    this.dialog = dialog;
}
public void startStreaming(final String mediaUrl, long mediaLengthInKb,
        long mediaLengthInSeconds) throws IOException {

    this.mediaLengthInKb = mediaLengthInKb;
    this.mediaLengthInSeconds = mediaLengthInSeconds;

    Runnable r = new Runnable() {
        public void run() {
            // Dialog dialog=null;
            try {
                downloadAudioIncrement(mediaUrl);

            } catch (IOException e) {
                Log.e(getClass().getName(),
                        "Unable to initialize the MediaPlayer for fileUrl="
                                + mediaUrl, e);
                return;
            }
        }
    };
    new Thread(r).start();

}

public void downloadAudioIncrement(String mediaUrl) throws IOException {

    URLConnection cn = new URL(mediaUrl).openConnection();
    cn.connect();
    InputStream stream = cn.getInputStream();
    if (stream == null) {
        Log.e(getClass().getName(),
                "Unable to create InputStream for mediaUrl:" + mediaUrl);
    }

    downloadingMediaFile = new File(context.getCacheDir(),
            "downloadingMedia.dat");
    if (downloadingMediaFile.exists()) {
        downloadingMediaFile.delete();
    }

    FileOutputStream out = new FileOutputStream(downloadingMediaFile);
    byte buf[] = new byte[16384];
    int totalBytesRead = 0, incrementalBytesRead = 0;
    do {
        int numread = stream.read(buf);
        if (numread <= 0)
            break;
        out.write(buf, 0, numread);
        totalBytesRead += numread;
        incrementalBytesRead += numread;
        totalKbRead = totalBytesRead / 1000;

        testMediaBuffer();
        fireDataLoadUpdate();
    } while (validateNotInterrupted());
    stream.close();
    if (validateNotInterrupted()) {
        fireDataFullyLoaded();
    }
}

private boolean validateNotInterrupted() {
    if (isInterrupted) {
        if (mediaPlayer != null) {
            mediaPlayer.pause();
            // mediaPlayer.release();
        }
        return false;
    } else {
        return true;
    }
}

private void testMediaBuffer() {
    Runnable updater = new Runnable() {
        public void run() {
            if (mediaPlayer == null) {
                // Only create the MediaPlayer once we have the minimum
                // buffered data
                if (totalKbRead >= INTIAL_KB_BUFFER) {
                    try {
                        startMediaPlayer();
                    } catch (Exception e) {
                        Log.e(getClass().getName(),
                                "Error copying buffered conent.", e);
                    }
                }
            } else if (mediaPlayer.getDuration()
                    - mediaPlayer.getCurrentPosition() <= 1000) {
                transferBufferToMediaPlayer();
            }
        }
    };
    handler.post(updater);
}

private void startMediaPlayer() {
    try {
        File bufferedFile = new File(context.getCacheDir(), "playingMedia"
                + (counter++) + ".dat");

        moveFile(downloadingMediaFile, bufferedFile);

        Log.e(getClass().getName(),
                "Buffered File path: " + bufferedFile.getAbsolutePath());
        Log.e(getClass().getName(),
                "Buffered File length: " + bufferedFile.length() + "");

        mediaPlayer = createMediaPlayer(bufferedFile);

        // We have pre-loaded enough content and started the MediaPlayer so
        // update the buttons & progress meters.
        mediaPlayer.start();
        startPlayProgressUpdater();
        playButton.setEnabled(true);
    } catch (IOException e) {
        Log.e(getClass().getName(), "Error initializing the MediaPlayer.",
                e);
        return;
    }
}

private MediaPlayer createMediaPlayer(File mediaFile) throws IOException {
    MediaPlayer mPlayer = new MediaPlayer();
    mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
        public boolean onError(MediaPlayer mp, int what, int extra) {
            Log.e(getClass().getName(), "Error in MediaPlayer: (" + what
                    + ") with extra (" + extra + ")");
            return false;
        }
    });
    FileInputStream fis = new FileInputStream(mediaFile);
    mPlayer.setDataSource(fis.getFD());
    mPlayer.prepare();
    return mPlayer;
}

private void transferBufferToMediaPlayer() {
    try {
        // First determine if we need to restart the player after
        // transferring data...e.g. perhaps the user pressed pause
        boolean wasPlaying = mediaPlayer.isPlaying();
        int curPosition = mediaPlayer.getCurrentPosition();
        // Copy the currently downloaded content to a new buffered File.
        // Store the old File for deleting later.
        File oldBufferedFile = new File(context.getCacheDir(),
                "playingMedia" + counter + ".dat");
        File bufferedFile = new File(context.getCacheDir(), "playingMedia"
                + (counter++) + ".dat");

        // This may be the last buffered File so ask that it be delete on
        // exit. If it's already deleted, then this won't mean anything. If
        // you want to
        // keep and track fully downloaded files for later use, write
        // caching code and please send me a copy.
        bufferedFile.deleteOnExit();
        moveFile(downloadingMediaFile, bufferedFile);
        mediaPlayer.pause();
        mediaPlayer = createMediaPlayer(bufferedFile);
        mediaPlayer.seekTo(curPosition);

        boolean atEndOfFile = mediaPlayer.getDuration()
                - mediaPlayer.getCurrentPosition() <= 1000;
        if (wasPlaying || atEndOfFile) {
            mediaPlayer.start();
        }
        oldBufferedFile.delete();

    } catch (Exception e) {
        Log.e(getClass().getName(),
                "Error updating to newly loaded content.", e);
    }
}

private void fireDataLoadUpdate() {
    Runnable updater = new Runnable() {
        public void run() {
            textStreamed.setText((totalKbRead + "Kb"));
            float loadProgress = ((float) totalKbRead / (float) mediaLengthInKb);
            progressBar.setSecondaryProgress((int) (loadProgress * 100));
            if (dialog != null)
                dialog.dismiss();
        }
    };
    handler.post(updater);
}

private void fireDataFullyLoaded() {
    Runnable updater = new Runnable() {
        public void run() {
            transferBufferToMediaPlayer();

            // Delete the downloaded File as it's now been transferred to
            // the currently playing buffer file.
            downloadingMediaFile.delete();
            textStreamed
                    .setText(("Audio full loaded: " + totalKbRead + " Kb read"));
        }
    };
    handler.post(updater);
}

public MediaPlayer getMediaPlayer() {
    return mediaPlayer;
}

public void startPlayProgressUpdater() {
    float progress = (((float) mediaPlayer.getCurrentPosition() / 1000) / mediaLengthInSeconds);
    progressBar.setProgress((int) (progress * 100));
    if (dialog != null)
        dialog.dismiss();
    if (mediaPlayer.isPlaying()) {
        Runnable notification = new Runnable() {
            public void run() {
                startPlayProgressUpdater();
            }
        };
        handler.postDelayed(notification, 1000);
    }
}

public void interrupt() {
    playButton.setEnabled(false);
    isInterrupted = true;
    validateNotInterrupted();
}

public void moveFile(File oldLocation, File newLocation) throws IOException {

    if (oldLocation.exists()) {
        BufferedInputStream reader = new BufferedInputStream(
                new FileInputStream(oldLocation));
        BufferedOutputStream writer = new BufferedOutputStream(
                new FileOutputStream(newLocation, false));
        try {
            // byte[] buff = new byte[8192];
            /* changing the size of the buffer */

            byte[] buff = new byte[16384];

            int numChars;
            while ((numChars = reader.read(buff, 0, buff.length)) != -1) {
                writer.write(buff, 0, numChars);
            }
        } catch (IOException ex) {
            throw new IOException("IOException when transferring "
                    + oldLocation.getPath() + " to "
                    + newLocation.getPath());
        } finally {
            try {
                if (reader != null) {
                    writer.close();
                    reader.close();
                }
            } catch (IOException ex) {
                Log.e(getClass().getName(),
                        "Error closing files when transferring "
                                + oldLocation.getPath() + " to "
                                + newLocation.getPath());
            }
        }
    } else {
        throw new IOException(
                "Old location does not exist when transferring "
                        + oldLocation.getPath() + " to "
                        + newLocation.getPath());
    }
}

public void change_volume(float vol) {
    Log.i("Media Player volume change", "Success" + vol);
    mediaPlayer.setVolume(vol, vol);
}

public void stop() {
    // TODO Auto-generated method stub
    mediaPlayer.stop();
}

public void stoppreviousPlayer() {
    if (mediaPlayer.isPlaying()) {

        mediaPlayer.stop();
        // mediaPlayer.release();
    }

}

}

4

2 回答 2

0

首先,您必须在 res 文件夹中创建一个 raw 文件夹,然后将要播放的歌曲粘贴到那里。MainActivity,java======

  protected void onCreate(){
        MediaPlayer backgroundSong;
        backgroundSong = MediaPlayer.create(MainActivity.this, R.raw.your_song_name);
        backgroundSong.start();}
        @Override
            protected void stopSong() {
                // TODO Auto-generated method stub
                backgroundSong.release();
            }

其他活动.java

protected void onPause(){
MainActivity ma = new MainActivity();
ma.stopSong();
}
于 2013-11-07T06:00:48.477 回答
0

您需要一个独立于活动的服务来播放歌曲

public class SongService extends Service {

MediaPlayer mm;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();

    mm = MediaPlayer.create(this, R.raw.mainmenu2);
    mm.setLooping(true);
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    mm.stop();
}

@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    super.onStart(intent, startId);
    mm.start();
}

}

然后在您想在服务中播放歌曲时添加它。

startService(new Intent(this, SongService.class));

并完成它添加这个:

stopService(new Intent(MainMenu.this,SongService.class));

因此,当您按下按钮时启动服务,并且每当您按下停止按钮时停止它。这就是您可以通过活动播放歌曲的方式。

于 2013-11-07T05:07:18.670 回答