我正在實現一個服務,並在本地綁定它的服務上有一個包裝類。現在,當我將該服務作爲jar導出並從另一個應用程序鏈接到該應用程序時(此應用程序實例化包裝類)。 當我運行應用程序時,我收到ClassCastException異常:android.os.BinderProxy不能轉換到XXX單位包裝類引起局部綁定$ LocalBinder :
service = ((LocalBinder) binder).getService();
這裏的粘結劑類型的BinderProxy而不是localbinder,從而導致崩潰。
此應用程序的唯一工作方式是應用程序的包名稱與服務包名稱相同(我認爲android認爲該服務是本地的)。
private final IBinder localBinder = new LocalBinder();
public class LocalBinder extends Binder {
xxxService getService() {
return xxxService.this;
}
}
和
public IBinder onBind(Intent intent) {
IBinder result = null;
result = localbinder;
return result;
}
在我的包裝類
然後onServiceConnected:
public void onServiceConnected(ComponentName name, IBinder binder) {
xxxService = ((LocalBinder) binder).getService();
最後我的包裝類的構造函數:
public xxxServiceManager(Context context) throws Exception {
this.context = context;
xxxServiceManagerIntent = new Intent("providerAPI");
xxxServiceManagerIntent.setClassName("com.yyy", "com.yyy.xxxService");
context.startService(xxxServiceManagerIntent);
context.bindService(xxxServiceManagerIntent, serviceConnection, Context.BIND_AUTO_CREATE);
然後在主應用程序,使用該罐子,如果你設置包名
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yyy.provider" //the same as the service (which does not make sense)
一切正常,但顯然我想設置另一個包的名稱。 有什麼辦法可以重新設計或完成這項工作嗎?
謝謝!
更多源代碼將是有幫助的。你的服務(特別是'onBind()'方法和你的'LocalBinder'類)和你的綁定代碼可以揭示很多關於問題的原因。 –
將您的代碼添加到您的原始問題會更好。這將是更可讀的方式,你不需要擔心評論的字符限制。 –
希望現在更清楚..感謝您的幫助! –