サービスを実装しようとしていますが、サービスにclassCastExceptionがあります。LocationはParcelableではないため、ParcelableArrayListでラップします。
public class GPSService extends Service {
public void setLocation(Location location) {
ArrayList<Location> locationArrayList = new ArrayList<Location>(1);
locationArrayList.add(location);
Bundle b = new Bundle();
b.putParcelableArrayList("location", locationArrayList);
// try with an arrayList instead of just getExtra doesn't change anything :(
ArrayList<GPSResultReceiver> resultReceiverArrayList = intent.getParcelableArrayListExtra("receiver");
// this is a resultReceiver and not a GPSResultReceiver
// where did the upcast happen?
GPSResultReceiver receiver = resultReceiverArrayList.get(0);
Log.d("ResultClass", receiver.getClass().toString());
receiver.onReceiveResult(1111, b);
}
私のアクティビティは次のようになります。
public class MyActivity extends Activity implements GPSResultReceiver.Receiver {
void startService() {
resultReceiver = new GPSResultReceiver(new Handler());
resultReceiver.setReceiver(this);
final Intent intent = new Intent(Intent.ACTION_SEND, null, this, GPSService.class);
// intent.putExtra("receiver", resultReceiver);
ArrayList<GPSResultReceiver> resultReceiverArrayList = new ArrayList<GPSResultReceiver>(1);
resultReceiverArrayList.add(resultReceiver);
intent.putParcelableArrayListExtra("receiver", resultReceiverArrayList);
serviceRunning = true;
startService(intent);
}
私のGPSResultReceiver:
public class GPSResultReceiver extends ResultReceiver {
private Receiver resultReceiver;
public GPSResultReceiver(Handler handler) {
super(handler);
}
public void setReceiver(Receiver receiver) {
resultReceiver = receiver;
}
public interface Receiver {
public void onReceiveResult(int resultCode, Bundle resultData);
}
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
if (resultReceiver != null) {
resultReceiver.onReceiveResult(resultCode, resultData);
}
}
}
では、なぜこのキャストがここで発生するのでしょうか。また、どうすれば回避できますか?
前もって感謝します