Я сделал приложение на основе приложения удаленной службы android API, которое использует обратные вызовы для уведомления об основной деятельности для изменений, приложение отлично работает, передавая только одно значение int из удаленного сервиса обратно в действие. Проблема в том, что я хочу передать некоторые строки, а не обратно, чтобы обновить интерфейс activiti, как я могу это сделать? Я думал о возврате объекта, но есть недостаток документации и не знаю, как и если это возможно.callback обратного вызова android
ответ
Вы можете передавать строки по умолчанию, и вы должны смотреть на Parcelable объектов (там нет недостатка документации)
Ok просто понять это, я вывешиваю решение для того, чтобы помочь другим с подобной проблемой ,
1. Вам нужно сделать отдельный файл помощи, содержащий только содержащийся объект (см. Ссылку в комментариях выше).
- Второй в интерфейсе обратного вызова импортирует этот интерфейс, а затем добавляет его в качестве параметра.
- , когда вы реализуете метод из интерфейса обратного вызова в своем классе активности, добавьте возвращаемый объект (это будет анализируемый объект) в качестве объекта сообщения и отправьте это сообщение.
- в обработчике просто размонтируйте объект и используйте его.
Это пример кода:
интерфейс объекта The Parcable в:
package sap.max;
parcelable ParcableInfo;
Интерфейс Callback:
package sap.max;
import sap.max.ParcableInfo;
/**
* A callback interface used by IMonitorService to send
* synchronous notifications back to its clients. Note that this is a
* one-way interface so the server does not block waiting for the client.
*/
oneway interface IRemoteServiceCallback {
/**
* Called when the service has a new value for you.
*/
void valueChanged(in ParcableInfo info);
}
действия сервиса (обратите внимание, что это только то, что услуга будет вызывать не полный код):
private final Handler mHandler = new Handler() {
@Override public void handleMessage(Message msg) {
switch (msg.what) {
// It is time to bump the value!
case REPORT_MSG: {
// Up it goes.
int value = ++mValue;
// Broadcast to all clients the new value.
final int N = mCallbacks.beginBroadcast();
for (int i=0; i<N; i++) {
try {
ParcableInfo parceInfo = new ParcableInfo(telephonyManager.getSubscriberId());
parceInfo.setID(telephonyManager.getSubscriberId());
mCallbacks.getBroadcastItem(i).valueChanged(parceInfo);
} catch (RemoteException e) {
// The RemoteCallbackList will take care of removing
// the dead object for us.
}
}
mCallbacks.finishBroadcast();
// Repeat every 3 second.
sendMessageDelayed(obtainMessage(REPORT_MSG), 1*3000);
} break;
default:
super.handleMessage(msg);
}
}
};
И, наконец, часть Деятельности:
private IRemoteServiceCallback mCallback = new IRemoteServiceCallback.Stub() {
@Override
public void valueChanged(ParcableInfo info) throws RemoteException {
CellInfo cellInfo = new CellInfo(null, null, null, null, null, null, null);
cellInfo.setDeviceId(info.ID);
Message msg = mHandler.obtainMessage(BUMP_MSG, info);
mHandler.sendMessage(msg);
}
И сообщение обрабатывается:
//this is the handler for the service...
private Handler mHandler = new Handler() {
@Override public void handleMessage(Message msg) {
switch (msg.what) {
case BUMP_MSG:
ParcableInfo info = (ParcableInfo) msg.obj;
configView.setText(info.ID);
Toast.makeText(AntiTheft.this, "Received from service: " + info.ID,
Toast.LENGTH_SHORT).show();
break;
default:
super.handleMessage(msg);
}
}
};
Надеется, что это помогает другим, спасибо за помощь fedj.
Я создал простой файл «ParcableInfo.aidl», содержащий:
package my.package.name;
parcelable ParcableInfo;
Однако, когда я строю проекта «ParcableInfo.java» не генерируется в папке «поколения».
Я понял: в той же папке, что и в файле maxsap ParcableInfo.aidl, мне нужно создать свой ParcableInfo.java, который реализует Parcelable ... для примера этой реализации см .: http://developer.android.com/reference/android /os/Parcelable.html –
- 1. Callback обратного вызова Disqus
- 2. Ошибка обратного вызова Android
- 3. CodenameOne Callback обратного вызова GoogleConnect не запускается на Android
- 4. Jeditable CANCEL callback от обратного вызова AJAX?
- 5. Процедура обратного вызова в Android
- 6. Выполнение обратного вызова внутри обратного вызова
- 7. Android Обратного вызова метод
- 8. Android OnDestroy обратного вызова
- 9. Проблема добавления обратного вызова для SurfaceView - Android
- 10. callback обратного обмена
- 11. метеор обратного вызова небо обратного вызова после того, как другой функции обратного вызова
- 12. Избегайте дублирования обратного вызова
- 13. Кордоба обратного вызова плагина Android
- 14. Функция обратного вызова в Android
- 15. Android анонимных функции обратного вызова
- 16. поведение обратного вызова датчика Android
- 17. Функция обратного вызова на Android
- 18. Кнопка обратного вызова фрагмента Android
- 19. URL Android обратного вызова OnCreate
- 20. проблема обратного вызова интерфейса Android
- 21. jquery animation callback - как передать параметры для обратного вызова
- 22. TypeError: callback не является функцией при выполнении обратного вызова
- 23. Callback hell help, записывая функцию внутри обратного вызова
- 24. Вызов callback() после завершения обратного вызова другой функции
- 25. Метод callback обратного вызова SignalR, вызываемый несколько раз
- 26. Как распространять значение обещания обратного вызова на Model.find (obj, callback)?
- 27. Сохранение обратного вызова
- 28. Кнопка вызова YouTube Callback Event
- 29. интерфейс обратного вызова android в Websocket onMessage
- 30. функции обратного вызова - NodeJS
Как передать строки, можете ли вы направить мой учебник или пример? документация не работала для меня. В примерах sdk в RemoteServiceBinding вы реализуете метод, определяющий интерфейс обратного вызова: public voidvalueChanged (intvalue) {mHandler.sendMessage (mHandler.obtainMessage (BUMP_MSG, value, 0)); }, который передает возвращаемое значение int объекту Message, а затем просто обновляет ui внутри обработчика, меняет метод внутри интерфейса и теперь принимает строки, но я не могу обновить интерфейс от метода ValueChanged, и я не могу передать строки в Message объект. – maxsap
http://developer.android.com/guide/developing/tools/aidl.html – fedj
Я знаю, что в этой статье он просто описывает, что делается на примере RemoteService, не очень помог мне, поскольку он показывает только, как передать аргумент arg и просто говорит о том, что пакеты не показывают, как это сделать! – maxsap