最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Activity與Service之間交互并播放歌曲的實現(xiàn)代碼

 更新時間:2013年07月29日 09:38:44   作者:  
以下是對Activity與Service之間交互并播放歌曲的實現(xiàn)代碼進行了詳細的分析介紹,需要的朋友可以過來參考下

Activity與Service之間交互并播放歌曲,為了方便,我把要播放的歌曲定死了,大家可以靈活改進
 



MService:

復制代碼 代碼如下:

package com.tiantian.test;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;
public class MService extends Service{
    MyBinder myBinder = new MyBinder();
    private MediaPlayer mediaPlayer;

    public class MyBinder extends Binder{
        MService getService(){
            return MService.this;
        }
    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        Log.v("CAT", "onBind");
        return myBinder;
    }
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        Log.v("CAT", "onCreate");
        try {
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/mp3/trhxn.mp3");
            mediaPlayer.prepare();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            Log.v("CAT", "fail");
            e.printStackTrace();
        }
    }
    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.v("CAT", "onDestroy");
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Log.v("CAT", "onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
        Log.v("CAT", "onUnbind");
        return false;
    }

    public void start(){
        mediaPlayer.start();
    }
    public void pause(){
        mediaPlayer.pause();
    }
    public void stop(){
        mediaPlayer.stop();
        mediaPlayer.release();
    }
    public int getDuration(){
        return mediaPlayer.getDuration();
    }
    public int getCurrentPosition(){
        return mediaPlayer.getCurrentPosition();
    }
    public void seekTo(int position){
        mediaPlayer.seekTo(position);
    }
}

MusicPlayActivity:
復制代碼 代碼如下:

package com.tiantian.test;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
public class MusicPlayActivity extends Activity {
    /** Called when the activity is first created. */
    MService mService;
    private ServiceConnection conn = new ServiceConnection(){
        @Override
        public void onServiceConnected(ComponentName arg0, IBinder arg1) {
            // TODO Auto-generated method stub
            mService = ((MService.MyBinder)arg1).getService();
            Log.v("CAT", "getServiced");
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub
            mService = null;
        }

    };

    private SeekBar seekBar;
    private Button playBT;

    private boolean isPlaying = false;
    private boolean isBinded = false;

    private Handler mHandler;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent = new Intent(MusicPlayActivity.this, MService.class);
        if(!isBinded){
            bindService(intent, conn, BIND_AUTO_CREATE);
            isBinded = true;
        }
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        playBT = (Button) findViewById(R.id.startBT);
        mHandler = new Handler();
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {}

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                if(fromUser){
                    mService.seekTo((progress*mService.getDuration())/100);
                }
            }
        });
        playBT.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(!isPlaying){
                    mService.start();
                    isPlaying = true;
                    playBT.setText("暫停");
                    mHandler.post(seekBarThread);
                }else{
                    mService.pause();
                    isPlaying = false;
                    playBT.setText("播放");
                    mHandler.removeCallbacks(seekBarThread);
                }
            }
        });

    }

    Runnable seekBarThread = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            seekBar.setProgress((mService.getCurrentPosition()*100)/mService.getDuration());
            mHandler.postDelayed(seekBarThread, 200);
        }
    };

}

相關文章

  • Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法【附源碼下載】

    Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法【附源碼下載】

    這篇文章主要介紹了Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法,結合實例形式分析了Android橫向列表GridView實現(xiàn)橫向滾動的相關布局與功能實現(xiàn)技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下
    2018-01-01
  • Android之AttributeSet案例詳解

    Android之AttributeSet案例詳解

    這篇文章主要介紹了Android之AttributeSet案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Android用戶注冊界面

    Android用戶注冊界面

    這篇文章主要介紹了Android用戶注冊界面 的相關資料,需要的朋友可以參考下
    2016-03-03
  • Android實現(xiàn)跟隨手指拖動并自動貼邊的View樣式(實例demo)

    Android實現(xiàn)跟隨手指拖動并自動貼邊的View樣式(實例demo)

    本文通過實例代碼給大家介紹了android實現(xiàn)跟隨手指拖動并自動貼邊的View樣式,效果非常棒,具有參考借鑒價值,需要的朋友參考下吧
    2017-01-01
  • Android實現(xiàn)頁面滑動切換動畫

    Android實現(xiàn)頁面滑動切換動畫

    這篇文章主要為大家詳細介紹了Android實現(xiàn)頁面滑動切換動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • RecyclerView的使用之HelloWorld

    RecyclerView的使用之HelloWorld

    RecyclerView是伴隨Android 5.0發(fā)布的新控件,是一種列表容器,Google意在用新的RecyclerView來取代老舊的ListView和GridView,它的使用靈活性和性能都要優(yōu)于ListView,通過本文給大家介紹RecyclerView的使用之HelloWorld,需要的朋友參考下
    2016-03-03
  • Kotlin中協(xié)程的創(chuàng)建過程詳析

    Kotlin中協(xié)程的創(chuàng)建過程詳析

    使用協(xié)程的專業(yè)開發(fā)者中有超過 50% 的人反映使用協(xié)程提高了工作效率,下面這篇文章主要給大家介紹了關于Kotlin中協(xié)程創(chuàng)建過程的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • Flutter監(jiān)聽當前頁面可見與隱藏狀態(tài)的代碼詳解

    Flutter監(jiān)聽當前頁面可見與隱藏狀態(tài)的代碼詳解

    文章介紹了如何在Flutter中使用路由觀察者來監(jiān)聽應用進入前臺或后臺狀態(tài)以及頁面的顯示和隱藏,并通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2025-03-03
  • 基于DownloadManager的簡單下載器編寫小結

    基于DownloadManager的簡單下載器編寫小結

    Android自帶的DownloadManager是一個很好的下載文件的工具。該類在API level 9之后出現(xiàn),它已經(jīng)幫我們處理了下載失敗、重新下載等功能,整個下載過程全部交給系統(tǒng)負責,不需要我們過多的處理,非常的nice。關鍵的是用起來也很簡單,稍微封裝一下就可以幾句話搞定下載
    2017-12-12
  • Android Parcelable接口使用方法詳解

    Android Parcelable接口使用方法詳解

    這篇文章主要介紹了 Android Parcelable接口使用方法詳解的相關資料,實現(xiàn)Parcelable就是為了進行序列化,需要的朋友可以參考下
    2017-08-08

最新評論

石首市| 夏河县| 西乡县| 綦江县| 隆昌县| 西安市| 阿克陶县| 兖州市| 于都县| 荣昌县| 义马市| 广丰县| 宝坻区| 噶尔县| 彭州市| 明溪县| 临夏市| 昂仁县| 偃师市| 澳门| 南乐县| 涡阳县| 连南| 武城县| 布尔津县| 长乐市| 荔波县| 岳西县| 花垣县| 建宁县| 六盘水市| 丹东市| 遂溪县| 深泽县| 绍兴县| 南部县| 乐东| 吉水县| 九龙县| 霍城县| 郓城县|