讓該Android應用程序無法正常工作有點麻煩。基本上,在主菜單中,我啓動了一個我創建的服務,並且工作正常。我遇到的問題是我有一個可從主要活動中調用的選項活動,我希望選項活動能夠與我在主要活動中開始的服務進行交互。(Android)將服務綁定到除了啓動服務的活動以外的其他活動
我讀過這個頁面http://developer.android.com/guide/components/bound-services.html,我似乎已經做得很好,但是當我嘗試訪問服務的某些成員函數時,我的程序崩潰了。它特別發生在我嘗試訪問服務內部的哈希映射時。
在我的onCreate類選項菜單活動:
Intent passedintent = getIntent(); // gets the intent sent to the activity
//Intent intentShim = new Intent(this, ShimmerService.class);
// binds the shimmer service to this activity
boolean isconnected = getApplicationContext().bindService(intent, shimmerServiceConnection, Context.BIND_AUTO_CREATE);
// register the shimmer receiver
registerReceiver(shimmerReceiver, new IntentFilter("com.jpl_347E.bio_sigapp.ShimmerService"));
的passedintent意圖從那個開始這項活動的主要活動的意圖。起初,我嘗試通過這個作爲第一個參數
getApplicationContext().bindService(....)
函數,但它似乎沒有工作。所以我創建了一個新的意圖,它反映了我在主菜單活動中用於創建服務的意圖。我也有我的選項菜單活性這些功能
private ServiceConnection shimmerServiceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
LocalShimmerBinder binder = (LocalShimmerBinder)arg1;
serviceshim = binder.getService();
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
}
};
private BroadcastReceiver shimmerReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getIntExtra("ShimmerState", -1) != -1)
;//TODO
}
};
這幾乎是相同的代碼,我在我的主菜單活動,這是完全能夠找到那裏的服務。我想我已經跟蹤誤差的
binder.getService()
該函數返回空值,然後我嘗試訪問的HashMap中,我引用變量沒有指向(它指向空)的一類。 我只是不知道爲什麼binder.getService()會在這裏返回null,而不是在主菜單功能。我可能需要重新啓動服務嗎? 我想,一旦我開始主要服務,我不需要在這個活動中重新開始。
感謝您的輸入,我應該怎樣通過'this'呢? – JohnA
對不起,你沒有通過應用程序上下文,你只是使用它。所以你應該刪除「getApplicationContext()」。從調用bindService的前面。 – Dave