文档章节

android aidl使用小例子

anlen_gzz
 anlen_gzz
发布于 2015/09/11 10:49
字数 626
阅读 806
收藏 5

文件分布:

CompareService.aidl

package com.anlen.comparetoservice;

interface CompareService {
	int  CompareTo(int num1,int num2);
}

CompareToService.java

package com.anlen.comparetoservice;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;

public class CompareToService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		System.out.println("成功绑定服务");
		return new CompareIBinder();
	}
	
	@Override
	public boolean onUnbind(Intent intent) {
		System.out.println("解除绑定服务");
		return super.onUnbind(intent);
	}
	@Override
	public void onCreate() {
		System.out.println("远程服务被创建");
		super.onCreate();
	}
	@Override
	public void onDestroy() {
		System.out.println("远程服务被销毁");
		super.onDestroy();
	}
	
	/*
	 * CompareToService内部比较函数
	 */
	private int compareTo(int num1,int num2){
		return num1>num2?num1:num2;
	}
	
	//内部类实现接口并调用service内部方法,使外部类也能调用service内的方法
	private class CompareIBinder extends CompareService.Stub{
		@Override
		public int CompareTo(int num1, int num2) throws RemoteException {
			return compareTo(num1, num2);
		}	

	
	}
}

MainActivity.java

package com.anlen.experimentthree;

import com.anlen.comparetoservice.CompareService;

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

public class MainActivity extends Activity {
	Intent intent;
	EditText numberOne;
	EditText numberTwo;
	EditText numberLarge;
	
	
	private CompareService compareService;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		numberOne = (EditText)findViewById(R.id.numberOne);
		numberTwo = (EditText)findViewById(R.id.numberTwo);
		numberLarge = (EditText)findViewById(R.id.numberlarge);
		
		/*
		 * 为意图设定action
		 * */
		intent=new Intent();
		intent.setAction("com.anlen.CompareToService");
	
	}
	public void binder(View view){
		bindService(intent, new ConnectService(), BIND_AUTO_CREATE);
	}
	public void compareTo(View view){
		
		String numberone=numberOne.getText().toString();
		String numbertwo=numberTwo.getText().toString();
		
		int one = Integer.parseInt(numberone);
		int two = Integer.parseInt(numbertwo);
		
		int large = 0;
			try {
				large = compareService.CompareTo(one, two);
			} catch (RemoteException e) {
				e.printStackTrace();
			}
		numberLarge.setText(Integer.toString(large)+"比较大");
	}
	
	/*
	 * 连接服务类
	 * */
	private class ConnectService implements ServiceConnection  {
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			//强制转化类型
			compareService=CompareService.Stub.asInterface(service);
		}
		@Override
		public void onServiceDisconnected(ComponentName name) {
			compareService=null;
		}
	}

}

布局xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

		
	<EditText
		android:id="@+id/numberOne"
		android:inputType="numberSigned"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:text="" />
    <EditText
        android:id="@+id/numberTwo"
        android:inputType="numberSigned"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/numberOne"
        android:text="" />
   <LinearLayout
       android:id="@+id/linear"
       android:layout_below="@+id/numberTwo"
       android:layout_width="match_parent"
       android:layout_height="50dp"
       android:gravity="center"> 
       <Button 
         android:id="@+id/binder"
         android:onClick="binder"
         android:layout_width="200dp"
         android:layout_height="50dp"
         android:text="@string/binderservice"/>
        <Button 
         android:id="@+id/compareTo"
         android:onClick="compareTo"
         android:layout_width="200dp"
         android:layout_height="50dp"
         android:text="@string/app_name"/>
     </LinearLayout>
      <EditText
      android:id="@+id/numberlarge"
      android:inputType="numberSigned"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@+id/linear"
      android:text="" />
</RelativeLayout>

AndroidManifest.xml 服务添加

  
        <service  android:name="com.anlen.comparetoservice.CompareToService">
            <intent-filter>
                <!-- 设定一个名字给外部进程调用该服务 -->
               <action android:name="com.anlen.CompareToService" />
      		 </intent-filter>
       </service>


© 著作权归作者所有

anlen_gzz
粉丝 3
博文 63
码字总数 13345
作品 0
广州
程序员
私信 提问
Android AIDL 远程服务器使用示例

很多网友来函表示对Android AIDL不是很理解,这里Android123准备了一个简单的例子,帮助大家了解Android上比较强大的远程服务设计吧。 一、为什么要使用AIDL,他的优势有哪些呢? AIDL服务更像...

阿酷
2011/10/21
1K
0
【专题】Android AIDL使用

文章不讲如何简单的创建AIDL,会使用项目中实际的例子来说如何使用,也方便了解了AIDL的同学却不知道在什么情况下使用的。 先来了解下AIDL,英文全称叫Android Interface definition langua...

老牟
2014/04/30
435
0
[实践] Android5.1.1源码 - 在Framework中添加自定义系统服务

前言 本文的方法要修改Android源码。但只要将系统服务写出来,也可以注入system_server进程将系统服务加载到system_server中。 步骤 1. 添加一个aidl文件,我将aidl文件添加到这个路径下: ...

阿里聚安全
2016/05/30
1K
0
Android - 使用AIDL设计远程接口

Android Interface Definition Language(AIDL) 译者署名: 移动云_文斌 译者链接:http://blog.csdn.net/caowenbin 版本:Android 2.3 r1 原文 http://developer.android.com/guide/develop......

阿酷
2011/11/17
2.2K
0
Android之AIDL进程之间的通信

意义: 由于每个应用进程都有自己的独立进程空间,在android平台上,一个进程通常不能访问另一个进程的内存空间,而我们经常需要夸进程传递对象,就需要把对象分解成操作对象可以理解的基本单...

zhoulc
2014/02/12
6.6K
1

没有更多内容

加载失败,请刷新页面

加载更多

vue入门--简单路由配置

本文转载于:专业的前端网站➜vue入门--简单路由配置   在初始化vue init webpack <工程名>时,有一步是询问是否安装vue-router,选择yes,如果没有安装的话,后面需要自己安装。然后在目录...

前端老手
22分钟前
3
0
怎么给视频配音

很多刚开始尝试视频制作的小伙伴,帮助到怎么给制作完成的视频配音,其实给视频配音的方法非常简单,在手机上可以进行制作,下面一起来看看给视频配音的方法吧! 具体步骤如下: 1、首先在手...

白米稀饭2019
32分钟前
3
0
windows批处理bat脚本编写

什么是bat脚本 .bat结尾的文件其实就是windows上的批处理脚本,Windows中的bat文件相当于 Linux中shell编程的.sh脚本,批量执行DOS命令。 其最简单的例子,是逐行书写在命令行中会用到的各种...

孙幼凌
39分钟前
3
0
华为手机翻译功能怎么使用?这三种方法请务必收藏

华为手机翻译功能怎么使用?在我们的生活中会经常遇到翻译问题,许多外语不好的朋友该怎么办呢?华为手机已经为我们解决了这个问题,今天小编就教大家学会使用华为手机中的三种翻译技巧,需要...

翻译小天才
47分钟前
5
0
企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求、用户需求、产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需...

积木创意科技
50分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部