java对外sdk提供接口_Android SDK封装,对外提供接口
項(xiàng)目中需要把連接服務(wù)器的部分做成一個(gè)service并生成一個(gè)jar模塊。其他產(chǎn)品就可通過(guò)這個(gè)包來(lái)快速的開(kāi)發(fā)連接服務(wù)器的應(yīng)用軟件。做成一個(gè)service的優(yōu)點(diǎn)是:
1. 在后臺(tái)運(yùn)行,可以一直保持與服務(wù)器的連接
2. 服務(wù)可以只對(duì)外提供接口,具體功能在服務(wù)內(nèi)部實(shí)現(xiàn)
3. 增加項(xiàng)目代碼的耦合性
打開(kāi)幾個(gè)我使用的第三方sdk的jar包看看:
這是微信的語(yǔ)音識(shí)別sdk的jar包的內(nèi)容
我們一般開(kāi)發(fā)一個(gè)sdk當(dāng)然是定義遠(yuǎn)程的service,也就是通過(guò)bingservice啟動(dòng)的方式來(lái)啟動(dòng)的服務(wù)。
同時(shí),應(yīng)用和服務(wù)通信的方式有Messenger和aidl,具體區(qū)別看別人的文章吧。
我們這里是開(kāi)發(fā)一個(gè)sdk,因此選擇了使用aidl,當(dāng)然如果你的sdk并不包含任何服務(wù),就沒(méi)有這回事兒了。
現(xiàn)在以一個(gè)例子描述創(chuàng)建一個(gè)服務(wù)并調(diào)用的過(guò)程。例子的功能是設(shè)置一個(gè)數(shù)字的值到服務(wù)里,然后在從服務(wù)里讀出來(lái)。主界面用于放置了兩個(gè)按鍵用于觸發(fā)以上兩個(gè)動(dòng)作,調(diào)用的結(jié)果在logcat里顯示。
首先創(chuàng)建一個(gè)工程,,然后在項(xiàng)目src下面創(chuàng)建一個(gè)包,用于放置服務(wù)的代碼以及一個(gè)包用于放置aidl文件。包內(nèi)依次放置了服務(wù)類(lèi)和aidl文件。創(chuàng)建完之后,內(nèi)容如下。
其中CloudServiceInterface.aidl文件內(nèi)容如下:
packagecom.rayleigh.aidl;
interfaceCloudServiceInterface {
void setInfo(intperson);
int? getInfo();
}
CloudService.java文件文件內(nèi)容如下:
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;
}
};
}
然后點(diǎn)擊project->clean,來(lái)編譯項(xiàng)目。就會(huì)在gen目錄里生成了CloudServiceInterface.aidl所用對(duì)應(yīng)的CloudServiceInterface.java。如下:
然后在AndroidMannifest.xml里面添加服務(wù)聲明:
android:name="com.rayleigh.cloud.CloudService"
android:process=":remote"
>
android:name="com.rayleigh.cloud.CloudService"/>
然后在MainActivity.java里面定義服務(wù)對(duì)象:
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;
}
};
然后調(diào)用bindService函數(shù)啟用服務(wù)。我定義成函數(shù)如下:
private void connectionToService() {
Intent intent=newIntent(MainActivity.this,CloudService.class);
this.getApplicationContext().bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
}
在onCreate里面調(diào)用此函數(shù)。
最后onCreate里面的內(nèi)容如下:
@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();
}
其中按鍵點(diǎn)擊響應(yīng)函數(shù)如下:
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;
}
}
};
分別點(diǎn)擊兩個(gè)按鍵來(lái),設(shè)置數(shù)字到服務(wù)里,和從服務(wù)里獲取數(shù)據(jù)
這個(gè)例子很簡(jiǎn)單,看代碼就可以了
總結(jié)
以上是生活随笔為你收集整理的java对外sdk提供接口_Android SDK封装,对外提供接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第二专业 计算机考试成绩查询系统,202
- 下一篇: eclipse实现Android登录功能