Những gì tôi có:Cách tốt nhất để giao tiếp một dịch vụ với một hoạt động (phát sóng, callbacks, vv)
Tôi có một thư viện chạy trên một quá trình sử dụng aidl. Tôi có một ứng dụng sử dụng thư viện này và trên hoạt động nhắn tin, tôi kết nối với dịch vụ để gửi tin nhắn và tôi có một bộ thu phát sóng để quản lý các tin nhắn đến.
Sự cố?
nếu thư viện này sẽ được sử dụng bởi hai ứng dụng trên cùng một thiết bị, hành động phát sẽ giống nhau và tôi sẽ gặp sự cố khi tôi gửi một chương trình phát sóng.
Nghi ngờ của tôi là gì?
Cách tốt nhất để "nghe" các tin nhắn mới đến mà tôi nhận được trên thư viện của mình và gửi nó đến Ứng dụng là gì. Có thể gọi lại? hoặc có giải pháp nào tốt hơn không?
Thông tin thêm
Thư viện cung cấp một vài phương pháp để bắt đầu một phiên làm việc, và các phương pháp khác để gửi loại khác nhau của thông điệp (hình ảnh, văn bản, địa điểm, vv ...) và tôi nhận được một cuộc gọi lại từ một thư viện khác, sử dụng C và C++, khi một thư mới đến.
Nếu bạn cần thêm thông tin, hãy hỏi.
Mã của tôi:
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 hoạt động này, tôi có một máy thu phát sóng và tôi có thể cập nhật giao diện người dùng với một thông điệp mới
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();
}
};
Bạn có vấn đề gì với chương trình phát sóng? –
Sử dụng cùng một thư viện cho các ứng dụng khác nhau: Cùng tên hành động phát sóng trên thư viện với các ứng dụng khác nhau: Tôi không biết chính xác điều gì sẽ xảy ra. Dù sao, bạn có nghĩ đây là một cách tiếp cận tốt không? – Pipeline
Vấn đề đằng sau người nhận là gì .. người nhận là lựa chọn tốt nhất. Tất cả các dự án và lib có được phát triển bởi bạn không? –