java对外sdk提供接口_Android SDK封装,对外提供接口
項目中需要把連接服務器的部分做成一個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封装,对外提供接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第二专业 计算机考试成绩查询系统,202
- 下一篇: 不连续曲线 highcharts_什么是