项目中需要把连接服务器的部分做成一个service并生成一个jar模块。其他产品就可通过这个包来快速的开发连接服务器的应用软件。做成一个service的优点是:

1. 在后台运行,可以一直保持与服务器的连接

2. 服务可以只对外提供接口,具体功能在服务内部实现

3. 增加项目代码的耦合性

打开几个我使用的第三方sdk的jar包看看:

这是微信的语音识别sdk的jar包的内容

我们一般开发一个sdk当然是定义远程的service,也就是通过bingservice启动的方式来启动的服务。

同时,应用和服务通信的方式有Messenger和aidl,具体区别看别人的文章吧。

我们这里是开发一个sdk,因此选择了使用aidl,当然如果你的sdk并不包含任何服务,就没有这回事儿了。

现在以一个例子描述创建一个服务并调用的过程。例子的功能是设置一个数字的值到服务里,然后在从服务里读出来。主界面用于放置了两个按键用于触发以上两个动作,调用的结果在logcat里显示。

首先创建一个工程,,然后在项目src下面创建一个包,用于放置服务的代码以及一个包用于放置aidl文件。包内依次放置了服务类和aidl文件。创建完之后,内容如下。

其中CloudServiceInterface.aidl文件内容如下:

packagecom.rayleigh.aidl;

interfaceCloudServiceInterface {

void setInfo(intperson);

int  getInfo();

}

CloudService.java文件文件内容如下:

packagecom.rayleigh.cloud;

importcom.rayleigh.aidl.CloudServiceInterface;

import android.app.Service;

importandroid.content.Intent;

importandroid.os.IBinder;

importandroid.util.Log;

publicclass CloudService extends Service {

private int testdata = 0;

public CloudService() {

}

private static final StringTAG="Test";

@Override

public void onCreate()

{

Log.i(TAG, "ServiceonCreate--->");

//TODO:register broadcast

TODO: 2016/12/18  or start do something

super.onCreate();

}

@Override

public int onStartCommand(Intent intent,int flags, int startId) {

// return super.onStartCommand(intent,flags, startId);

return START_STICKY;

}

@Override

public void onDestroy()

{

Log.i(TAG, "ServiceonDestroy--->");

//TODO: unregister broadcast

super.onDestroy();

}

@Override

public boolean onUnbind(Intent intent) {

Log.i(TAG, "Serviceonunbind--->");

return super.onUnbind(intent);

}

@Override

public void onRebind(Intent intent) {

Log.i(TAG, "Serviceonrebond--->");

super.onRebind(intent);

}

@Override

public IBinder onBind(Intent intent) {

// TODO: Return the communicationchannel to the service.

// throw new UnsupportedOperationException("Notyet implemented");

return mBinder;

}

private final CloudServiceInterface.StubmBinder = new CloudServiceInterface.Stub() {

@Override

public void setInfo(int person)  {

testdata = person;

}

@Override

public int getInfo()   {

return testdata;

}

};

}

然后点击project->clean,来编译项目。就会在gen目录里生成了CloudServiceInterface.aidl所用对应的CloudServiceInterface.java。如下:

然后在AndroidMannifest.xml里面添加服务声明:

android:name="com.rayleigh.cloud.CloudService"

android:process=":remote"

>

android:name="com.rayleigh.cloud.CloudService"/>

然后在MainActivity.java里面定义服务对象:

CloudServiceInterfacemService;

private ServiceConnectionserviceConnection =new ServiceConnection() {

@Override

publicvoid onServiceConnected(ComponentName componentName,IBinder iBinder) {

Log.e("on","on service connected");

mService = CloudServiceInterface.Stub.asInterface(iBinder);

}

@Override

publicvoid onServiceDisconnected(ComponentName componentName) {

Log.e("on","on service disconnected");

mService = null;

}

};

然后调用bindService函数启用服务。我定义成函数如下:

private void connectionToService() {

Intent intent=newIntent(MainActivity.this,CloudService.class);

this.getApplicationContext().bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);

}

在onCreate里面调用此函数。

最后onCreate里面的内容如下:

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

startBtn = (Button)findViewById(R.id.StartBtn);

stopBtn = (Button) findViewById(R.id.StopBtn);

startBtn.setOnClickListener(listener);

stopBtn.setOnClickListener(listener);

connectionToService();

}

其中按键点击响应函数如下:

private View.OnClickListener listener = newView.OnClickListener()

{

@Override

public void onClick(Viewv)

{

switch (v.getId())

{

case R.id.StartBtn:

if (mService != null){

try {

mService.setInfo(3);

Log.e("mainactivity","setvalue success");

} catch (Exceptione){

}

} else {

Log.e("mainactivity","mServiceis null");

}

break;

case R.id.StopBtn:

if (mService != null){

try {

int a= mService.getInfo();

Log.e("mainactivity","getvalue is :"+ a);

} catch (Exceptione) {

}

} else {

Log.e("mainactivity","mServiceis null");

}

break;

default:

break;

}

}

};

分别点击两个按键来,设置数字到服务里,和从服务里获取数据

这个例子很简单,看代码就可以了

java对外sdk提供接口_Android SDK封装,对外提供接口相关推荐

  1. android java包_android SDk中常用的java包介绍

    下面是android SDK中API中的主要java包的功能简介: android.app :提供高层的程序模型.提供基本的运行环境 android.content :包含各种的对设备上的数据进行访问 ...

  2. Java端字节跳动接口调用SDK包

    最近因为需求需要对接字节跳动的小程序,需要调用后端的接口,但是官方没有提供对应的SDK包,所以就自写了一套SDK代码,代码有问题或者有疑问的地方希望可以指出,谢谢; 有需要的朋友自提 贴上Github ...

  3. 海康 linux java demo_Linux下调用海康SDK(java版)

    一:配置java项目所需的库文件,库文件的配置分为两种方案 方案1 :将需要的库文件放到系统的 /usr/lib下,HCNetSDKCom文件夹下的文件也copy到 /usr/lib下 方案2: 2. ...

  4. (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)

     目录 :        24 ). 面向对象(聚集关系) 25 ). 面向对象(子父类中变量的特点) 26 ). 面向对象(子父类中函数的特点-覆盖) 27 ).  面向对象(子父类中构造函数的特点 ...

  5. 【小白学java】java的面向对象设计:封装+继承+抽象类+接口(day06)

    课程链接:共六天 第一天:开发环境:初识java,搭建环境 第二天:语言基础:关键字.变量.常量.运算符 第三天:数据结构:基本类型.包装类型.引用类型(数组和对象) 第四天:流程控制:分支判断.循环 ...

  6. java 接口封装_Java-封装 接口

    Java 封装 封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问 要访问该类的代码和数据,必须通过严格的接口 ...

  7. 适配器模式(为被封装对象提供不同的接口)

    一.适配器讲解 说到适配器,我们最熟悉的莫过于电源适配器了,也就是手机的充电头.它就是适配器模式的一个应用.试想一下,你有一条连接电脑和手机的 USB 数据线,连接电脑的一端从电脑接口处接收 5V 的 ...

  8. mob sdk vue 短信验证_短信接口那些事儿,你知道多少?

    短信接口那些事儿,你知道多少? 无数宣传报道,很多人都了解短信接口在企业和用户.企业跟员工之间连接的方便性,而被很多企业商家所应用.只是有些人们还是对短信接口使用原则和用途不是很明白,今天小编就带给大 ...

  9. java获取钉钉登录信息,JAVA maven项目使用钉钉SDK获取token、用户

    本文介绍了JAVA maven项目使用钉钉SDK获取token.用户,分享给大家,具体如下: 将SDK放一个文件里,记住文件地址.D:eclipse-workspace项目名模块名lib win+r ...

最新文章

  1. less.js插件监听
  2. 2440 nand flash和nor flash上启动
  3. 区块链技术解决物联网安全问题
  4. 【Python】pdfminer3k模块批量转换本地PDF文件
  5. 北大师兄告诉你,怎样顺利完成自己的博士生涯
  6. android 添加桌面快捷方式
  7. 分享《数字化建设地图》与《BI地图》,大数据知识点一次看过瘾
  8. java工厂模式的学习
  9. Swift iOS : plist
  10. python面向对象基础知识_面向对象的一些基本知识(python)
  11. 没有IDEA与Eclipse,该怎么学Java?
  12. Jira与敏捷项目管理
  13. matlab 教案,matlab第七讲教案.doc
  14. 铁威马教程之如何轻松同步TNAS和云盘数据
  15. 集群通信组件tribes之集群的平行通信
  16. AndroidStudio的强大搜索功能介绍!全局搜索、搜索文件、搜索类、搜索文本、搜索一切
  17. 得知大熊哥最后一天在岗位工作今天离开有感而发
  18. 中国电信9月在京推5G新号段,资费199元至599元?
  19. Python OpenCV:利用滚动条移动图片,利用鼠标缩放图片
  20. Kotlin高仿微信-第26篇-朋友圈-选择图片、小视频对话框

热门文章

  1. ES迁mysql_使用kafka连接器迁移mysql数据到ElasticSearch
  2. notification源码分析_Ceilometer之notification agent代码分析
  3. C++ class和struct的区别
  4. java写一个类吧,能不能自己写个java自带的类
  5. 【蓝桥杯每日一练】 巴斯卡三角形(杨辉三角形)
  6. Python小白的数学建模课-18.最小生成树问题
  7. odp 加固 mysql_creator是一款为php框架odp的脚手架工具
  8. 设无向图g如图所示_阿里重磅发布大规模图神经网络平台 AliGraph,架构算法解读...
  9. 搭建webUI自动化及问题解决:Message: ‘chromedriver‘ executable needs to be in PATH.解决办法
  10. 数据结构-栈5-栈的应用-后缀转中缀