当前位置:   article > 正文

java对外sdk提供接口_Android SDK封装,对外提供接口

对外sdk

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

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

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

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

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

934246808bc6

934246808bc6

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

934246808bc6

我们一般开发一个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;

}

}

};

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/627222
推荐阅读
相关标签
  

闽ICP备14008679号