2014-11-21 83 views
0

我想要將一個Handler對象通過Bundle從一個Activity發送到服務,以便從此服務獲取一些信息。Parcelable自定義處理程序,從未收到消息

現在,測試它是一個簡單的消息。下面是活動中的代碼:

private MyHandler mHandlerSharing = new MyHandler() { 
    public void handleMessage(Message msg) { 
     // this line in the Activity is never reached when debugging 
     String data = msg.getData().getString("data"); 
     Toast.makeText(mContext, data, Toast.LENGTH_SHORT).show(); 
    } 
}; 

// in some function 
mSecureSharing.putExtra(Constants.HANDLER, (Parcelable) mHandlerSharing); 

然後,在服務onStartCommandMetehod我做到以下幾點:

MyHandler myHandler = (MyHandler) intent.getExtras().getParcelable(Constants.HANDLER); 
    Message msgObj = myHandler.obtainMessage(); 
    Bundle b = new Bundle(); 
    b.putString("data", "SecureSharing running"); 
    msgObj.setData(b); 
    myHandler.sendMessage(msgObj); 

類MyHandler的是以下幾點:

import android.os.Handler; 
import android.os.Parcel; 
import android.os.Parcelable; 

public class MyHandler extends Handler implements Parcelable{ 
private int mData; 

public MyHandler(){ 
    super(); 
} 

public int describeContents() { 
    return 0; 
} 

public void writeToParcel(Parcel out, int flags) { 
    out.writeInt(mData); 
} 

public static final Parcelable.Creator<MyHandler> CREATOR = new Parcelable.Creator<MyHandler>() { 
    public MyHandler createFromParcel(Parcel in) { 
     return new MyHandler(in); 
    } 

    public MyHandler[] newArray(int size) { 
     return new MyHandler[size]; 
    } 
}; 

private MyHandler(Parcel in) { 
    mData = in.readInt(); 
} 

}

該服務接收自定義處理程序但從來沒有,並從類中調用sendMessage方法處理程序,但活動永遠不會收到消息...

對於MyHandler類,我基本上使用android developer site的代碼,並添加Handler繼承以及構造函數。

什麼可能是錯的?

在此先感謝!

+0

的使用Messenger的類,它是專爲像您這樣的工作 – pskink 2014-11-21 12:40:36

+0

是很容易使用? – Fernando 2014-11-21 12:58:13

+0

是的,它是谷歌的「綁定服務機器人」 – pskink 2014-11-21 13:01:09

回答

-1

我想,你希望你的活動與服務進行通信,這些可能是你的選擇:

  1. 使用ResultReceiver的例子可以發現here
  2. 使用LocalBroadcastReceiver例子可以發現here
  3. 您可以使用活頁夾綁定你的服務活動的例子可以發現here
  4. 如果你想使用RPC,那麼你應該與Messanger一起例​​子可以找到herehere
  5. 對於RPC也可以使用AIDL文件的例子可以找到here當然對developer site
+0

Downvoted,這並沒有給出問題的答案,只是一個例子的清單。 – 2016-03-21 16:26:48

+0

@KristopherMicinski我很感謝你抽出時間來解釋你爲什麼downvoted。但是你有沒有試着去理解這個人所遇到的問題?如果不是的話,我會請你閱讀問題的第一段。在後半部分,他只闡述了他到目前爲止所做的解決方案,以解決這個問題。 兄弟,相信我,我已經參與了培訓小組和青少年一段時間了,並且可以收集人們期待的解決方案。 你可以downvote和打電話給你的朋友,並downvote,對我來說重要的是,最後這傢伙有他的答案! :) – 2016-04-20 18:24:17

+0

我已經「試圖理解這個人遇到的問題」,雖然我同意其中的一些可以解決他的問題,但StackOverflow是以具體和有針對性的方式提供問題答案的地方,而不僅僅是提供指向可能有用的東西。 – 2016-04-20 20:37:02