2011-10-19 10 views
0

私はAndroid DevelopersのWebサイトでチュートリアルを実行しましたが、自分のサービスをバインドするアクティビティを取得できません。cantはサービスにバインドします

package com.dieselboris.motioncapture; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.content.ServiceConnection; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.dieselboris.motioncapture.LocalService.LocalBinder; 

public class HelloMotionCaptureActivity extends Activity implements OnClickListener { 
    private TextView textBox; 
    LocalService mService; 
    boolean mBound = false; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     textBox = (TextView) findViewById(R.id.textView1); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     // Bind to LocalService NEVER RETURNS TRUE!!!! 
     Intent intent = new Intent(this, LocalService.class); 
     boolean isBound = bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
     String text = Boolean.toString(isBound); 
     textBox.setText(text); 

    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     // Unbind from the service 
     if (mBound) { 
      unbindService(mConnection); 
      mBound = false; 
     } 
    } 

    //start the service when clicked 
    public void onClick(View v) { 

     if (v == startButton) 
     { 
      //NEVER IN HERE 
      if (mBound) { 
       int num = mService.getRandomNumber(); 
       Toast.makeText(this, "incoming number: " + num, Toast.LENGTH_LONG).show(); 
      } 
      Toast.makeText(this, "the service should run now", Toast.LENGTH_LONG).show(); 

     } 
    } 

    /** Defines callbacks for service binding, passed to bindService() */ 
    private ServiceConnection mConnection = new ServiceConnection() { 

     @Override 
     public void onServiceConnected(ComponentName className, 
       IBinder service) { 
      // We've bound to LocalService, cast the IBinder and get LocalService instance 
      LocalBinder binder = (LocalBinder) service; 
      mService = binder.getService(); 
      mBound = true; 
      if (mBound) { 
       // Call a method from the LocalService. 
       // However, if this call were something that might hang, then this request should 
       // occur in a separate thread to avoid slowing down the activity performance. 
       int num = mService.getRandomNumber(); 
       String text = Integer.toString(num); 
       textBox.setText(text); 
      } 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName arg0) { 
      mBound = false; 
     } 
    }; 
} 

私がに接続しようとするサービス:

ERROR/AndroidRuntime(10878):致命的な例外:メイン

package com.dieselboris.motioncapture; 

import java.util.Random; 

import android.app.Service; 
import android.content.Intent; 
import android.os.Binder; 
import android.os.IBinder; 

public class LocalService extends Service { 
    // Binder given to clients 
    private final IBinder mBinder = new LocalBinder(); 
    // Random number generator 
    private final Random mGenerator = new Random(); 

    /** 
    * Class used for the client Binder. Because we know this service always 
    * runs in the same process as its clients, we don't need to deal with IPC. 
    */ 
    public class LocalBinder extends Binder { 
     LocalService getService() { 
      // Return this instance of LocalService so clients can call public methods 
      return LocalService.this; 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 

    /** method for clients */ 
    public int getRandomNumber() { 
     return mGenerator.nextInt(100); 
    } 
} 

を私はエミュレータからの次の出力を取得しますERROR/AndroidRuntime(10878):java.lang.NullPointerException
ERROR/AndroidRuntime(10878):com.dieselboris.motioncapture.HelloMotionCapturでeActivity.onClick(HelloMotionCaptureActivity.java:66)
ERROR/AndroidRuntime(10878):android.view.View.performClick(View.java:2408)で
ERROR/AndroidRuntime(10878):でandroid.view.View $ PerformClick.run(View.java:8817)
ERROR/AndroidRuntime(10878):android.os.Handler.handleCallback(Handler.java:587)
ERROR/AndroidRuntime(10878):android.os.Handler。 DispatchMessageを(Handler.java:92)
ERROR/AndroidRuntime(10878):android.app.ActivityThread.mainで(:android.os.Looper.loop(Looper.java:144)
ERROR/AndroidRuntime(10878)で、 ActivityThread.java:4937)
ERROR/AndroidRuntime( 10878):java.lang.reflect.Method.invokeNative(ネイティブメソッド)で
ERROR/AndroidRuntime(10878):java.lang.reflect.Method.invoke(Method.java:521)
ERROR/AndroidRuntimeで(10878 ):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(10878):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) )
ERROR/AndroidRuntime(10878):dalvik.system.NativeStart.main(ネイティブメソッド)

で、初期化される前、私がサービスからパブリックメソッドを呼び出すか、接続がまだ設定されていないようです。

私は開発者サイトの例を慎重に踏襲し、私が間違っていることを理解できません。

答えて

0

権限が正しく設定されていません。

アプリケーションマニフェストには、アプリケーション全体のアクセス許可と「使用許可」アクセス許可を挿入する必要がありました。

許可がないと、インテントは決してサービスに配信されません。

関連する問題