还是杂

远程服务

例如打英雄时想要买皮肤,支付方式需要用到银联或者支付宝等第三方软件里面的一部分功能,那么就需要一个类似“中间商”的角色,为两者搭建桥梁。

简单案例:

1.建立一个类继承Service类(支付服务)

public class PayService extends Service {
	
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	private class PayBinder extends IService.Stub{    //IService变成aibl文件后的继承方式

		@Override
		public double payFor(String account, String password, double money)
				throws RemoteException {
			
			return pay(account, password, money);  
		}
	}
	
	public double pay(String account,String password,double money){
		double code = -1;
		if (account.equals("168.com")&&password.equals("123456")) {     //对条件做出判定
			if (money > 12.5) {
				if (money == 200) {
					code = 1000200;
				}else if (money == 680) {
					code = 1000680;
				}else{
					code = money;
				}
			}
		}else{       //账号密码或错误
			code = 1001;
		}
		return code;
		
	}
	
	@Override
	public void onCreate() {
		Log.d("tada", "创建支付服务");
		super.onCreate();
	}
	@Override
	public boolean onUnbind(Intent intent) {
		Log.d("tada", "解绑");
		return super.onUnbind(intent);
	}
	@Override
	public void onDestroy() {
		Log.d("tada", "断开");
		super.onDestroy();
	}
	
}


1.2  建立一个接口,如果其他应用要用到此接口,需要把这个接口拿到本程序中,而且本程序下放置该接口的包名要与原包名相同,因此为了方便使用,创建在另一个包下。

        建立好接口,找到源文件,将原文件重命名为   aibl  文件

        在清单里注册,设定动作

interface IService {      

	double payFor(String account,String password,double money);
}
2.另一个应用(英雄买皮肤)

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
    }
    public void buySkin(View view){
    	Intent intent = new Intent();
    	intent.setAction("com.at.remoteService.pay");
    	bindService(intent, connection, BIND_AUTO_CREATE);    
    }
    public void bind(View view){
    	Intent intent = new Intent();        //建立联系,绑定服务
    	intent.setAction("com.at.remoteService.pay");
    	bindService(intent, connection, BIND_AUTO_CREATE);
    }
    private IService iservice;
    private ServiceConnection connection = new ServiceConnection(){

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			iservice = IService.Stub.asInterface(service);       //获取对象
			pay();
		}
		@Override
		public void onServiceDisconnected(ComponentName name) {
			iservice = null;
		}

	private void pay() {         //调用支付方法
			try {
				int payfor = (int) iservice.payFor("168.com", "123456", 208);
				switch (payfor) {
				case 1000200:
					Toast.makeText(MainActivity.this, "购买欧蕾那皮肤成功", 0).show();
					break;
				case 1000680:
					Toast.makeText(MainActivity.this, "购买艾希传说皮肤成功", 0).show();
					break;
				case 1001:
					Toast.makeText(MainActivity.this, "账号或密码不正确", 0).show();
					break;

				default:
					break;
				}
			} catch (RemoteException e) {
				e.printStackTrace();
			}
		}
    	
    };
}


电话监听

public class CellService extends Service {

	private TelephonyManager tm;


	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	@Override
	public void onCreate() {
		// TODO 
		Log.d("tada", "创建服务,电话监听开启");
		super.onCreate();
		tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
		tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
	}
	private PhoneStateListener listener = new PhoneStateListener(){
		public void onCallStateChanged(int state, String incomingNumber) {
			switch (state) {
			case TelephonyManager.CALL_STATE_IDLE:
				stopRecording();      //停止录音
				break;
			case TelephonyManager.CALL_STATE_RINGING:
				Log.d("tada", "电话铃响");
				break;
			case TelephonyManager.CALL_STATE_OFFHOOK:
				startRecording();       //电话通话
				Log.d("tada", "电弧通话"+incomingNumber);
				break;
			default:
				break;
			}
			Log.d("tada", "   "+state+"   "+incomingNumber);
		}
	};

	private void startRecording() {
			mRecorder = new MediaRecorder();
			mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
			mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//			文件
			File file = new File(
					Environment.getDownloadCacheDirectory(),System.currentTimeMillis()+".3gp");
			FileDescriptor descriptor;
			mRecorder.setOutputFile(file.getAbsolutePath());
			mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

			try {
				mRecorder.prepare();
			} catch (Exception e) {
				Log.e("vivi", "prepare() failed");
			}

			mRecorder.start();
		}

	private	MediaRecorder mRecorder;
	private void stopRecording() {
			if (mRecorder != null) {
				mRecorder.stop();
				mRecorder.release();
				mRecorder = null;
			}
		};
	
	
	@Override
	public void onDestroy() {
		// 反注册
		super.onDestroy();
		tm.listen(listener, PhoneStateListener.LISTEN_NONE);
		Log.d("tada", "停止电话监听");
	}

}
获取权限,在虚拟机上运行





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值