Я действительно пытался пройти через aim.putExtra() и getIntent(). GetExtras() и применить их к одному из учебных пособий SimpleService. Я знаю, что многие люди уже спрашивали: «Почему у вас всегда есть пустые объекты?» Я обещаю, что попытался взломать ответы, которые я нашел здесь в течение нескольких часов, прежде чем я рассмотрел публикацию, но я не думаю, что я достаточно продвинутый, чтобы действительно понять, что это, я должен делать неправильно с небольшими отрывками, которые публикуют люди. Таким образом, я ввел полный код своей деятельности и моей службы.Android - запуск службы с дополнительной информацией с помощью put/getExtra
Я думаю, что моя проблема в том, что мое начальное намерение (то, что я создаю в своей деятельности) не существует в контексте моей службы. Интересно, возможно ли, что я полностью использую намерения в неправильном направлении/цели? Я попробовал aim.putExtra в моей службе, чтобы попытаться отправить строку в другом направлении, но эти дополнительные функции всегда равны нулю. Так что, рискуя повторения, почему пустые дополнения всегда равны нулю? Как я могу сделать одно намерение, которое существует как в контексте моей деятельности, так и моей службы?
Следует отметить, что код, показанный ниже, очевидно, будет иметь нулевые дополнения, потому что я прокомментировал некоторые из моих попыток .getExtras(), которые потерпели неудачу. Я удалил все остальное ради чистоты.
РЕДАКТИРОВАТЬ: Ответ благодаря ответам, в коде для тех, кто также работал в Google в течение нескольких часов. Поместите это в службе (обратите внимание, что возвращение 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();
}
}
Добро пожаловать в Stackoverflow! Если вы найдете ответ полезным, пожалуйста, проголосуйте за него. Если ответ успешно отвечает на ваш вопрос, нажмите зеленую галочку рядом с ним, чтобы принять ответ. Также посмотрите http://stackoverflow.com/questions/how-to-ask за советом о том, как написать хороший вопрос. –
Kurtis, мне нравится ваше приглашение на акции! Я рад, что кто-то тратит время, чтобы сообщить новым прибывшим о том, как пользоваться услугой :) –
@Adam: Я не понимаю, извините: ваш код обслуживания в конце не имеет 'onStartCommand()' ?? –