我已經做了一個基於android API的遠程服務應用程序的應用程序,它使用回調來通知主要活動的變化,應用程序工作正常,只是從遠程服務返回一個單一的int值返回到活動。 問題是,我想傳遞一些字符串,而不是int回來更新activiti的用戶界面,我該怎麼做?我曾想過要返回一個對象,但缺少文檔,不知道如何或是否有可能。安卓服務回調
Q
安卓服務回調
1
A
回答
0
您可以通過默認傳遞字符串,你應該看看到Parcelable對象(不乏文檔)
2
好吧只是弄清楚,我張貼,以幫助其他人有類似問題的解決方案。
1.您需要製作一個單獨的aidl文件,其中只包含可分區對象(請參閱上面註釋中的鏈接)。
- 第二次在回調界面導入該界面,然後將其添加爲參數。
- 當您在活動類的回調接口中實現該方法時,將返回的對象(這將是可解析對象)作爲消息對象併發送該消息。
- 在處理程序中解開對象並使用它。
這是一個示例代碼:
的Parcable的對象接口:
package sap.max;
parcelable ParcableInfo;
回調接口:
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。
0
我創建了一個包含了簡單的「ParcableInfo.aidl」文件:
package my.package.name;
parcelable ParcableInfo;
然而,當我建「ParcableInfo.java」沒有在「根」文件夾中生成項目。
+0
我想通了:在與maxsap的ParcableInfo.aidl相同的文件夾中,我需要創建ParcableInfo.java實現Parcelable ...對於此實現的示例,請參閱:http://developer.android.com/reference/android /os/Parcelable.html – 2010-12-22 23:56:44
相關問題
- 1. 安卓服務
- 2. 安卓:當意圖調用服務
- 3. 安卓:隊列服務調用
- 4. 意圖內回調 - 安卓
- 5. 安卓計時器服務
- 6. 安卓服務問題
- 7. 安卓:從服務器
- 8. 安卓服務導致ANR
- 9. 安卓遠程服務器
- 10. 安卓多線程服務
- 11. 安卓:從服務器
- 12. 安卓:在服務器
- 13. 安卓聊天服務器
- 14. 安卓服務START_STICKY START_NOT_STICKY
- 15. 安卓音樂服務
- 16. 安卓android xmppconnection服務
- 17. 停止安卓服務
- 18. 安卓:使用服務
- 19. 安卓:從服務器
- 20. 安卓服務中的多個任務
- 21. 安卓界面回調問題
- 22. Xamarin XML安卓的onClick回調方法
- 23. 安卓方法回調不工作
- 24. 安卓:任務,並返回堆棧
- 25. 兩位聽衆在服務(安卓)
- 26. 安卓服務不會停止
- 27. 安卓:後臺服務不會停止
- 28. 安卓:讓服務不停止的
- 29. 安卓服務生活時間
- 30. 安卓與ASP.net服務GCM示例
我怎樣才能傳遞字符串,你可以指向我的教程或例子? 該文檔對我無效,在RemoteServiceBinding的sdk示例中,您實現了定義回調接口的方法,代碼是:public voidvalueChanged(intvalue){mHandler.sendMessage(BUMP_MSG,value,0)); }它將返回的int值傳遞給Message對象,然後簡單地更新處理程序中的UI,我已經改變了接口內的方法並且現在接受了字符串,但是我無法從ValueChanged方法更新UI,並且我無法將字符串傳遞給Message目的。 – maxsap 2010-08-17 13:29:46
http://developer.android.com/guide/developing/tools/aidl。html – fedj 2010-08-17 14:27:46
我知道那篇文章,它只是描述了RemoteService示例做了什麼並沒有多大幫助,因爲它只顯示瞭如何傳遞arg返回,並且只是說關於不顯示如何執行它的parcables! – maxsap 2010-08-17 14:33:49