2011-10-18 5 views
1

次のコードを実行すると、サービスの値はnullになります。しかし、私がonCreate(ボタンのような)の外側から何かを呼び出すと、それは機能します。宣言後にonCreateでAndroidサービスにアクセスする

これは、ユーザー入力なしでonCreateメソッドからアクセスできます。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    getApplicationContext().bindService(new Intent(ISoundControlService.class.getName()), 
     serConnSound, Context.BIND_AUTO_CREATE); 
    try { 
     soundService.start(); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

UPDATE:サービスを取得 ...

private ServiceConnection serConnSound = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     soundService = ISoundControlService.Stub.asInterface(service); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     soundService = null; 
    } 
}; 
+0

Hmm ..どのようにsoundService変数を初期化しますか? – HighFlyer

+0

詳細は – Jackie

答えて

1

私が言う:することはできませんServiceConnectionの全体のポイントだ

。これは非同期で初期化され、その事実に対処する必要があります。 onServiceConnectedが呼び出されると、サービスが利用可能になります。あなたがそのコールバックを待っている限り、あなたのサービス変数はnull ...

+0

を参照してください。これを処理する正しい方法は、メソッドとブロードキャストをonServiceonnectedから呼び出すブロードキャストレシーバを使用することです。 – Jackie

+0

あなたは何を意味するのか分かりません。 'bindService'はサービスを要求し、' onServiceConnected'はサービスが開始され、すぐに使用できるようになります。それまではサービスを利用できません。 'onServiceConnected'が呼び出されない限り、サービスが' null'をチェックするか、進行状況ダイアログを表示します... – Knickedi

関連する問題