Androidでのサービスの利用
8186 ワード
プロジェクト概要:このプロジェクトは音楽APP制御端がサービスを通じて音楽APPサービス端を呼び出して音楽を再生して音楽を停止する機能を実現することを模擬する(ただ模擬するだけで、再生を実現できない)
一、サービス端1.レイアウトファイルactivity_main.xmlで
3.音楽再生インタフェースをカスタマイズする.aidl(接尾辞名をaidlに変更しpublicを削除)
4.リストファイルAndroidManifest.xmlでの登録サービス
5.MainActivity.JAvaファイルでサービスのオープン、停止などの操作を完了
二、制御端1.レイアウトファイルactivity_main.xmlで
3.MainActivity.JAvaでの再生制御の実現
一、サービス端1.レイアウトファイルactivity_main.xmlで
2.在自定义的服务类MyService.java中,需要继承服务Service
package com.t20.music.service;
import com.t20.music.service.function.MusicFunction.Stub;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return new MyBinder();
}
/**
* , MusicFunction.aidl
*
* @author Administrator
*
*/
class MyBinder extends Stub {
@Override
public void Play(String name) throws RemoteException {
//
play(name);
}
}
/**
*
*/
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.w(" :", " ");
}
/**
*
*/
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.w(" :", " ");
}
/**
*
*
* @param name
*/
private void play(String name) {
Log.e(" :", " :" + name + ", !");
};
}
3.音楽再生インタフェースをカスタマイズする.aidl(接尾辞名をaidlに変更しpublicを削除)
package com.t20.music.service.function;
interface MusicFunction {
void Play(String name);
}
4.リストファイルAndroidManifest.xmlでの登録サービス
5.MainActivity.JAvaファイルでサービスのオープン、停止などの操作を完了
package com.t20.music;
import com.t20.music.service.MyService;
import com.t20.music.service.function.MusicFunction;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.View;
import android.widget.Toast;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
public class MainActivity extends Activity {
private Myconn myconn;//
MusicFunction mf;//
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
*
*
* @param v
*/
public void start(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MyService.class);
//
startService(intent);
myconn = new Myconn();
// ,BIND_AUTO_CREATE
bindService(intent, myconn, BIND_AUTO_CREATE);
}
/**
* , ,
*
* @param v
*/
public void stop(View v) {
if (myconn != null) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MyService.class);
//
unbindService(myconn);
mf = null;
myconn = null;
//
stopService(intent);
}
}
/**
*
*
* @author Administrator
*
*/
class Myconn implements ServiceConnection {
/**
* service MyService.java onBind()
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
mf = (MusicFunction) service;
}
/**
*
*/
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
/**
*
*
* @param v
*/
public void play(View v) {
String name = "xxx";
if (mf != null) {
try {
mf.Play(name);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_SHORT)
.show();
}
}
}
二、制御端1.レイアウトファイルactivity_main.xmlで
2.自定义播放接口MusicFunction.aidl(将后缀名改为aidl,并将public去掉,同时该接口路径必须和服务端MusicFunction.aidl接口的路径一致)
package com.t20.music.service.function;
interface MusicFunction {
void Play(String address);
}
3.MainActivity.JAvaでの再生制御の実現
package com.t20.kugou;
import com.t20.music.service.function.MusicFunction;
import com.t20.music.service.function.MusicFunction.Stub;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
public class MainActivity extends Activity {
private MusicFunction mf;
private Intent intent;
private MyConn myConn;
private EditText etName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
etName = (EditText) findViewById(R.id.etName);
//
intent = new Intent();
//
intent.setAction("com.music.kugou");
//
startService(intent);
Log.e(" :", " ");
myConn = new MyConn();
//
bindService(intent, myConn, 0);
}
/**
*
*/
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (myConn != null) {
//
unbindService(myConn);
if (intent != null) {
//
stopService(intent);
}
}
}
/**
*
*
* @author Administrator
*
*/
class MyConn implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
mf = Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
/**
*
*
* @param v
*/
public void play(View v) {
String name = etName.getText().toString();
try {
mf.Play(name);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}