AIDL API, устанавливающий связь с проприетарным серверным приложениемJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 AIDL API, устанавливающий связь с проприетарным серверным приложением

Сообщение Anonymous »

Новичок в разработке для Android: я создал приложение (сервер) в Android Studio и простой плагин в civTAK (клиент). Проще говоря, мое приложение является проприетарным, поэтому я не могу раскрывать или делиться пакетом/модулем приложения. Поэтому я придумал решение создать новую библиотеку, которая будет содержать вспомогательную информацию, например, «aidlinterface» с именем пакета com.aidlinterface, а затем добавить ее в градиент уровня приложения как для сервера, так и для клиента. apps.
Итак, древовидная структура — это project/server_app и project/aidlinterface, а для клиента — project/client_app и project/aidlinterface. Таким образом, приложение и библиотека находятся в одной иерархии. Благодаря этому мне удалось создать пакеты сервера и клиента, которые бы были одинаковыми «com.aidlInterface». Первый вопрос: подходит ли этот подход для этой проблемы/жизнеспособен ли этот подход или есть лучший способ?
Второй вопрос: затем я создал службу в серверном приложении и гарантировал, что служба инициализируется путем входа в MainActivity.kt в функции onCreate:

Код: Выделить всё

startService(Intent(this, ServiceName::class.java))
И для целей этого примера мы можем сказать, что у службы есть только оператор журнала, в котором говорится «инициализация службы», но когда я захожу в logcat и фильтрую по com.aidlinterface
code>, ничего не появляется, что говорит мне о том, что пакет не прикреплен. но я добавил пакет:

Код: Выделить всё

dependencies {
implementation(project(":aidlInterface"))
...
}
Вот интерфейс AIDL:

Код: Выделить всё

// IAIDLColorInterface.aidl
package com.aidlinterface;

// Declare any non-default types here with import statements

interface IAIDLColorInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
int getColor();
}
Тот же интерфейс присутствует в библиотеке клиентского приложения.
Вот сервис в серверном приложении:

Код: Выделить всё

package com.aidlinterface;

import android.app.Service;
import android.content.Intent;
import android.graphics.Color;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

import java.util.Random;

public class AIDLColorService extends Service {

private static final String TAG ="AIDLColorService" ;

public AIDLColorService() {
}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
return binder;
}

private final IAIDLColorInterface.Stub binder = new IAIDLColorInterface.Stub() {
@Override
public int getColor() throws RemoteException {
Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
Log.d(TAG, "getColor: "+ color);
return color;
}
};
}
Манифест библиотеки helplInterface серверного приложения: Вот код клиентского приложения, в котором я использую эту информацию:

Код: Выделить всё

import com.aidlinterface.IAIDLColorInterface

class ColorPlugin(
mapView:MapView ){

private var AIDLColorService: IAIDLColorInterface? = null

private val serviceConnection = object: ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service:IBinder?){
AIDLColorService = IAIDLColorInterface.Stub.asInterface(service)
}
override fun onServiceDisconnected(name: ComponentName?){
AIDLColorService = null
}
init{
val serviceIntent = Intent("AIDLColorService")
serviceIntent.setPackage("com.aidlInterface")
pluginContext.bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE)
override fun disposeImpl(){
pluginContext.unbindService(serviceConnection)
}

override fun onReceive(context:Context, intent: Intent){
// code for plugin

// CODE THAT CALLS SERVICE
b.setOnClickListener {
try {
val color = iADILColorService.color
it.setBackgroundColor(color)
} catch (e: RemoteException) {
// Handle exception
}
}

}
Будем очень признательны за любые советы по этому поводу. Я понимаю, что это очень расплывчатая проблема, но я постараюсь ответить на любые вопросы как можно лучше!

Подробнее здесь: https://stackoverflow.com/questions/789 ... server-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»