日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

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

發(fā)布時(shí)間:2025/3/15 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java对外sdk提供接口_Android SDK封装,对外提供接口 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

項(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。