2011-03-09 8 views
6

をサービスに渡されたアクセス変数は、私が主な活動から呼び出されたサービスを作成し、それをサービス内部から画面にアクセスしてトーストするための単純な変数を渡してきました。私は、サービス内から変数にアクセスするための正しいコードを見つけることができないようです。どんな助けでも大歓迎です。ありがとう。アンドロイド:

主な活動は、ボタンクリックリスナー内からサービスを呼び出す:

@Override 
public void onClick(View v) { 

    Intent eSendIntent = new Intent(getApplicationContext(), eSendService.class); 

    eSendIntent.putExtra("extraData", "somedata"); 

    startService(eSendIntent); 

} 

eSendServiceサービスクラスコード:

public class eSendService extends Service { 


    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 

      // This is the code that I am struggling with. Not sure how to access the 
      // variable that was set in the intent. Please advise. 
      // The below code gives the following error in eclipse: 
      //  The method getIntent() is undefined for the type eSendService 
      Bundle extras = getIntent().getExtras(); 

    } 

} 

を再度、任意およびすべてのヘルプに感謝を。私はこれを行う方法を私に示している単純な例を見つけることができないようです。ありがとう。あなたの元のコードがあなたに与えていた何の問題

答えて

3

?あなたは問題かもしれないと、)(super.onCreateを呼び出す前に、データを取得しようとしていました。

私はあなたがしたいと思う:

@Override 
public void onCreate() { 
    super.onCreate(); 

    Bundle extras = getIntent().getExtras(); 
    string extraData = extras.getString("extraData"); 

} 
+0

こんにちはE Zハート。私は変更なしでsuper.onCreate()メソッドの後でそれを試しました。 Eclipseは「getIntentを()」下線され、それ以上のIマウスは、私はこのエラーを取得するときに、「方法getIntentは()型eSendServiceについて定義されていません」。ご協力いただきありがとうございます。 – RayJamesFun

11

はOKが、最終的には自分の答えを見つけて、誰を助けるために、それを共有したいです。

答え:onStart()またはonStartCommand()(target apiに依存する)は、startService()がアクティビティによって呼び出された後にインテントが渡され、呼び出されるものです。私は意図がのonCreate()メソッドに渡されたが、それは実際にサービスの開始コマンドに渡されると思いました。

@Override public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    super.onStart(intent, startId); 
    String extras; extras = intent.getExtras().getString("extraData"); 
    Toast.makeText(this, extras, Toast.LENGTH_LONG).show(); 
}