Android使用AIDL方式實現(xiàn)播放音樂案例
本文實例為大家分享了Android使用AIDL方式實現(xiàn)播放音樂的具體代碼,供大家參考,具體內(nèi)容如下
思路:
① 新建兩個APP項目或者Module,一個作為服務(wù)端,一個作為客戶端,在服務(wù)端創(chuàng)建service
② 在兩個module的main文件中分別新建兩個aidl文件(接口),里邊定義處理音樂的方法
③ 在兩個AIDL文件定義過方法后在任務(wù)欄給他們makeproject,編譯成Java文件,才能在service和acvitity中使用
interface.Stub需要實例化,實現(xiàn)遠(yuǎn)程方法
④.Service中onbind方法,返回的是:interface.Stub。
sevice需要設(shè)置action,不然客戶端service運行時會報空指針異常
先處理服務(wù)端:
Mainfest文件中,為intent隱式調(diào)用添加action
<service android:name=".MusicService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.work.MusicService"></action> </intent-filter>
MusicService。Java
public class MusicService extends Service {
private MediaPlayer player = null;
public MusicService() {
}
//①實現(xiàn)已經(jīng)makeproject過的adil接口,重寫里邊自定義定義的三個方法
MusicAidlInterface.Stub stub = new MusicAidlInterface.Stub() {
@Override
public void paly() throws RemoteException {
if (player == null) {
player = MediaPlayer.create(MusicService.this, R.raw.hckz);
}
if (player != null && !player.isPlaying()){
player.start();
}
}
@Override
public void paus() throws RemoteException {
if(player!=null&&player.isPlaying()){
player.pause();
}
}
@Override
public void stop() throws RemoteException {
if(player!=null){
player.stop();
}
try {
player.prepare();//重新準(zhǔn)備下次播放
} catch (IOException e) {
e.printStackTrace();
}
}
};
@Override
public IBinder onBind(Intent intent) {
return stub;
}
//② 重寫service銷毀時的方法
@Override
public void onDestroy() {
super.onDestroy();
if(player!=null){
player.stop();
player.release();//釋放資源,防止失去依托溢出,發(fā)生異常
}
}
處理客戶端
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_play, btn_pause, btn_stop, btn_stopservice, btn_stopacvitity;
MusicAidlInterface service = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intiView();
connect();
}
private void intiView() {
btn_play = (Button) findViewById(R.id.btn_play);
btn_pause = (Button) findViewById(R.id.btn_pause);
btn_stopservice = (Button) findViewById(R.id.btn_stopservice);
btn_stopacvitity = (Button) findViewById(R.id.btn_exitacvitity);
btn_stop = (Button) findViewById(R.id.btn_stop);
btn_play.setOnClickListener(this);
btn_pause.setOnClickListener(this);
btn_stop.setOnClickListener(this);
btn_stopservice.setOnClickListener(this);
btn_stopacvitity.setOnClickListener(this);
}
@Override
public void onClick(View v) {
try {
switch (v.getId()) {
case R.id.btn_play:
service.paly();
break;
case R.id.btn_pause:
service.paus();
break;
case R.id.btn_stop:
service.stop();
break;
case R.id.btn_stopservice:
if (conn != null) {
unbindService(conn);
}
break;
case R.id.btn_exitacvitity:
finish();
break;
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
//連接service
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder iBinder) {
service = MusicAidlInterface.Stub.asInterface(iBinder);
}
@Override
public void onServiceDisconnected(ComponentName name) {
service = null;
}
};
//獲取連接BindService的方法
private void connect() {
//使用intent的隱式調(diào)用方法
Intent intent = new Intent("com.work.MusicService");
//設(shè)置目標(biāo)service的包名
intent.setPackage("com.work.musicservice");
bindService(intent, conn, BIND_AUTO_CREATE);
}
//重寫acvitity銷毀時候解除綁定的方法
@Override
protected void onDestroy() {
super.onDestroy();
if (conn != null) {//解除綁定
unbindService(conn);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android AIDL實現(xiàn)兩個APP間的跨進程通信實例
- Android使用AIDL實現(xiàn)兩個App間通信
- Android應(yīng)用程序四大組件之使用AIDL如何實現(xiàn)跨進程調(diào)用Service
- 使用Android studio創(chuàng)建的AIDL編譯時找不到自定義類的解決辦法
- Android 使用【AIDL】調(diào)用外部服務(wù)的解決方法
- 基于Android AIDL進程間通信接口使用介紹
- Android程序設(shè)計之AIDL實例詳解
- 實例講解Android中的AIDL內(nèi)部進程通信接口使用
- Android Studio創(chuàng)建AIDL文件并實現(xiàn)進程間通訊實例
- Android多進程間采用AIDL方式進行通信
相關(guān)文章
Android ListView與RecycleView的對比使用解析
這篇文章主要介紹了Android ListView與RecycleView的對比使用解析,需要的朋友可以參考下2017-12-12
Android通過記住密碼功能學(xué)習(xí)數(shù)據(jù)存儲類SharedPreferences詳解及實例
這篇文章主要通過“記住密碼”實例功能學(xué)習(xí)為大家介紹了Android數(shù)據(jù)存儲類SharedPreferences,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-03-03
Android高版本API方法如何在低版本系統(tǒng)上做兼容性處理淺析
這篇文章主要給大家介紹了關(guān)于Android高版本API方法如何在低版本系統(tǒng)上做兼容性處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
android開發(fā)仿ios的UIScrollView實例代碼
下面小編就為大家分享一篇android開發(fā)仿ios的UIScrollView實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android實現(xiàn)app應(yīng)用多語言切換功能
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)app應(yīng)用多語言切換功能的相關(guān)資料,類似于微信的語言切換,感興趣的小伙伴們可以參考一下2016-08-08

