Co mam:Najlepszy sposób komunikowania się usługi z działalności (broadcast, wywołania zwrotne, etc)
Mam biblioteka działa na procesie wykorzystującym aidl. Mam aplikację, która korzysta z tej biblioteki, a podczas przesyłania wiadomości łączę się z usługą, aby wysyłać wiadomości i mam odbiornik transmisji, aby zarządzać przychodzącymi wiadomościami.
Problem?
jeśli ta biblioteka będzie używana przez dwie aplikacje na tym samym urządzeniu, akcje emisji będą takie same, a przy wysyłaniu transmisji będę mieć problemy.
Jakie są moje wątpliwości?
Jaki jest najlepszy sposób, aby "posłuchać" nowych wiadomości przychodzących, które otrzymuję w mojej bibliotece i wysłać je do aplikacji. Może callback? czy jest jakieś lepsze rozwiązanie?
Więcej informacji
Biblioteka udostępnia kilka metod, aby rozpocząć sesję, a inne metody wysyłania różnego rodzaju wiadomości (obrazów, tekstu, miejsc, itp ...) i odbierać wywołania zwrotnego z inna biblioteka, która używa C i C++, gdy nadchodzi nowa wiadomość.
Jeśli potrzebujesz więcej informacji, zapytaj.
mój kod:
IRemote.aidl
interface IRemote
{
int sendTextMessage(String to, String message);
}
WrapperLibrary.java
public class MyLibrary extends Service {
// Current context, used to sendbroadcast() from @Callbacks
private Context mContext = this;
private static MyLibrary instance = new MyLibrary();
//Executor to start a new thread from the service.
final ExecutorService service;
@Override
public IBinder onBind(Intent arg0) {
//Return the interface.
return mBinder;
}
/** Return the current instance */
public static WrapperLibrary getInstance() {
return instance;
}
private final IRemote.Stub mBinder = new IRemote.Stub() {
@Override
public int sendTextMessage(String to, String message)
throws RemoteException {
Log.d(TAG, "Send Text Message. ");
int i = -1;
Future<Integer> task;
task = service.submit(new Callable<Integer>() {
public Integer call() {
return tu.tu_message_send_text(to, message);
}
});
try {
i = task.get();
} catch (Exception e) {
Log.e(TAG, "Send Text Message: EXCEPTION *** " + e.getMessage());
}
Log.d(TAG, "Send Text Message: Status Code: " + i);
return 0;
}
}
Callbacks.java
public class Callbacks extends JNICallback {
private Context mContext;
public Callbacks(Context context) {
this.mContext = context;
}
public void on_incoming_text_message(final String from, final String message) {
Log.d(TAG, " Incoming TEXT message from:" + from + " with message: " + message);
Intent i = new Intent(BroadcastActions.INCOMING_TEXT_MESSAGE);
i.putExtra("from", from);
i.putExtra("message", message);
mContext.sendBroadcast(i);
}
}
MainActivity.java O n ta aktywność Mam odbiornik rozgłaszania i mogę zaktualizować UI z nowej wiadomości
public class MessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extra = intent.getExtras();
String incomingMessage = "";
if(extra != null) {
incomingMessage = extra.getString("message");
addNewMessage(new Message(incomingMessage, false));
}
Toast.makeText(MessagingActivity.this, "Incoming Message", Toast.LENGTH_LONG).show();
}
};
Jakie problemy oczekujesz w związku z transmisjami? –
Użyj tej samej biblioteki dla różnych aplikacji: Ta sama nazwa akcji emisji w bibliotece z różnymi aplikacjami: nie wiem dokładnie, co się stanie. W każdym razie, czy uważasz, że to dobre podejście? – Pipeline
Jaki jest problem z odbiornikami .. odbiorniki są najlepszym wyborem. Czy wszystkie biblioteki i projekty zostały opracowane przez ciebie? –