Android – запуск службы с дополнительной информацией через put / getExtra

Я действительно попытался пройти через aim.putExtra () и getIntent (). GetExtras () и применить их к одному из учебных пособий SimpleService. Я знаю, что многие люди уже спрашивали: «Почему у вас всегда есть пустые объекты?» Я обещаю, что попытался взломать ответы, которые я нашел здесь в течение нескольких часов, прежде чем я рассмотрел публикацию, но я не думаю, что я достаточно продвинутый, чтобы действительно понять, что это такое, что я должен делать неправильно с небольшими отсканированными людьми. Таким образом, я ввел полный код своей деятельности и моей службы.

Я думаю, что моя проблема в том, что мое начальное намерение (то, что я создаю в своей деятельности) не существует в контексте моей службы. Интересно, возможно ли, что я полностью использую намерения в неправильном направлении / цели? Я пробовал использовать намерение.putExtra в своей службе, чтобы попытаться отправить строку в другом направлении, но эти дополнительные функции всегда равны нулю. Так что, рискуя повторения, почему у вас есть дополнительные функции, всегда нулевая? Как сделать одно намерение, которое существует как в контексте моей деятельности, так и моей службы?

Я должен отметить, что код, показанный ниже, очевидно, будет иметь нулевые дополнения, потому что я прокомментировал несколько моих попыток .getExtras (), которые потерпели неудачу. Я удалил все остальное ради чистоты.

EDIT: ответ благодаря ответам, в коде для тех, кто также был Googling часами. Поместите это в свою службу (обратите внимание, что возврат START_REDELIVER_INTENT может быть неправильным):

@Override public int onStartCommand( Intent intent , int flags , int startId ) { super.onStartCommand(intent, flags , startId); extras = intent.getExtras(); //just checking if( extras != null ) Toast.makeText(this,extras.getString("extratoservice"), Toast.LENGTH_SHORT).show(); return START_REDELIVER_INTENT; } 

Моя деятельность (основанная на блоге Сай Гиты):

 package com.example.BroadcastIntent; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class BroadcastIntentActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button start = (Button)findViewById(R.id.buttonStart); start.setOnClickListener(startListener); Button stop = (Button)findViewById(R.id.buttonStop); stop.setOnClickListener(stopListener); //the intent I'm using to start and stop the service -- the extras don't go anywhere.... intent = new Intent(BroadcastIntentActivity.this,BroadcastService.class); intent.putExtra("extratoservice", "if you can read this, it made it to the service" ); } Boolean serviceRunning; Intent intent; //Clicks from Geetha's Blog private OnClickListener startListener = new OnClickListener() { public void onClick(View v){ startService(intent); serviceRunning = true; } }; private OnClickListener stopListener = new OnClickListener() { public void onClick(View v){ try { stopService(intent); serviceRunning = false; } catch( Exception e) { Toast.makeText(getApplicationContext(), "Service was not running...",Toast.LENGTH_SHORT).show(); } } }; } 

И это мое служение:

 package com.example.BroadcastIntent; import android.app.Service; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; import android.widget.Toast; public class BroadcastService extends Service{ @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub //extras = arg0.getExtras(); <-- this has null extras, too... return null; } Bundle extras; @Override public void onCreate() { super.onCreate(); // extras = getIntent().getExtras(); <-- this is undefined? if( extras == null ) Toast.makeText(this,"Service created... extras still null", Toast.LENGTH_SHORT).show(); else Toast.makeText(this,extras.getString("extratoservice"), Toast.LENGTH_SHORT).show(); } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_SHORT).show(); } } 

Solutions Collecting From Web of "Android – запуск службы с дополнительной информацией через put / getExtra"

Вам нужно посмотреть на функцию onStartCommand () (я не на рабочем столе, поэтому я не могу удобно связать с javadoc). Это получит намерение, которое вы прошли, и ваши дополнительные услуги должны быть доступны там.

Я думаю, вам нужно сделать это на вашем сервисе.

  @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); 

Чтобы получить намерение, в котором вы проходите … но я не на это 100%, поэтому дважды проверьте http://developer.android.com/reference/android/app/Service.html