Android跨进程调用示例

1.首先创建服务类,需要继承Service类

package com.ex888.niubi.serv;

import java.io.File;
import java.io.IOException;

import com.ex888.niubi.MainActivity;
import com.ex888.niubi.function.MusicInterface.Stub;

import android.R;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Environment;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.widget.Toast;

public class MyService extends Service {
	private MediaPlayer mediaPlayer = new MediaPlayer();
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		//mediaPlayer.create(this, R.raw.);
		return new MyBinder();
	}
	
	class MyBinder extends Stub{

		@Override
		public void bofangyinyue(String path) throws RemoteException {
			// TODO Auto-generated method stub
			bofang(path);
		}

		
		
	}
	
	@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("服务", "服务结束了");
	}
	
	public void bofang(String path){
		Log.e("播放", "播放的音乐为:"+path);
	}	
}

2.需要在清单文件注册动作 

<service android:name="com.ex888.serv.MyService">
          <intent-filter>
              <action android:name="com.xxx.pay"/>
          </intent-filter>
 </service>

3.定义接口类  Android帮我们写好了  只需要调用  后缀名改为.aidl

interface MusicInterface {
	void bofangyinyue(String path);
}

4.必须将接口类的包连类一起复制到跨进程的项目中  包名类名都不能修改 不然会报bug

5.跨进程项目的MainActivity

package com.exa45.niubi;



import com.ex888.niubi.function.MusicInterface;
import com.ex888.niubi.function.MusicInterface.Stub;

import android.os.Bundle;
import android.os.IBinder;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener{
	private Button btnstart, btnstop, btn_zt;
	private EditText et1;
	private MusicInterface mif;
	private Intent intent;
	private MyConn myConn;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btnstart = (Button) findViewById(R.id.btn_start);
		btnstop = (Button) findViewById(R.id.btn_stop);
		btn_zt = (Button) findViewById(R.id.btn_zt);
		et1 = (EditText) findViewById(R.id.et1);
		
		btnstart.setOnClickListener(this);
		btnstop.setOnClickListener(this);
		btn_zt.setOnClickListener(this);
		
		myConn = new MyConn();
		intent = new Intent("com.xx.ooo");
		startService(intent);
		bindService(intent,myConn , BIND_AUTO_CREATE);
	}
	
	class MyConn implements ServiceConnection{

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// TODO Auto-generated method stub
			mif = Stub.asInterface(service);
		}

		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub
			
		}
		
	}
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		if (myConn != null) {
			unbindService(myConn);
		}
		if (intent != null) {
			stopService(intent);
		}
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.btn_start:
			String ms = et1.getText().toString();
			if (mif != null) {
				try {
					mif.bofangyinyue(ms);
				} catch (Exception e) {
					// TODO: handle exception
				}
			}
			
			break;

		default:
			break;
		}
	}

	

}

猜你喜欢

转载自blog.csdn.net/qq_40924516/article/details/80963225