Я действительно пытался пройти через intent.putExtra () и getIntent (). GetExtras () и применить их к одному из учебных пособий SimpleService. Я знаю, что многие люди уже спрашивали, "почему дополнения в комплекте всегда нулевые?" Я обещаю, что пытался взломать ответы, которые я нашел здесь, в течение нескольких часов, прежде чем подумать о публикации, но я не думаю, что я достаточно продвинут, чтобы действительно понять, что я должен делать неправильно с незначительными фрагментами, которые публикуют люди. В качестве такового я ввел полный код моей деятельности и моего обслуживания.
Я думаю, что моя проблема в том, что мое начальное намерение (то, которое я создаю в своей деятельности) не существует в контексте моей службы. Интересно, возможно, я использую Intents в неправильном направлении / цели? Я попробовал intent.putExtra в моем сервисе, чтобы попытаться отправить строку в другом направлении, но эти дополнения тоже всегда равны нулю. Таким образом, на риск повторения, почему дополнения в комплекте всегда нулевые? Как мне создать единую цель, которая существует как в контексте моей деятельности, так и в отношении моей службы?
Я должен отметить, что код, показанный ниже, очевидно, будет иметь нулевые дополнения, потому что я прокомментировал несколько моих попыток .getExtras (), которые потерпели неудачу. Остальное я удалил ради чистоты.
РЕДАКТИРОВАТЬ: Ответ, благодаря ответам, в коде для тех, кто также гуглил в течение нескольких часов. Поместите это в свою службу (обратите внимание, что возврат 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();
}
}