从Activity向Service发送数据

5
如何将数据从当前Activity发送到在特定时间运行的后台Service类?我尝试将其设置为Intent.putExtras(),但我在Service类中没有得到它。 Activity类中调用Service的代码。
Intent mServiceIntent = new Intent(this, SchedulerEventService.class);
        mServiceIntent.putExtra("test", "Daily");
        startService(mServiceIntent);

Service类中的代码。我试图将其放在onBind()onStartCommand()中。但是这两个方法都未打印出值。

@Override
public IBinder onBind(Intent intent) {
    //Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();

    //String data = intent.getDataString();

    Toast.makeText(this, "Starting..", Toast.LENGTH_SHORT).show();

    Log.d(APP_TAG,intent.getExtras().getString("test"));


    return null;
}
2个回答

4

在你的代码中应该使用 onStartCommand。如果你在活动上从未调用 bindService,那么它的 onBind 将不会被调用,并且使用 getStringExtra() 而不是 getExtras()

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    Toast.makeText(this, "Starting..", Toast.LENGTH_SHORT).show();
    Log.d(APP_TAG,intent.getStringExtra("test"));
    return START_STICKY; // or whatever your flag
}

当我尝试在onStartCommand()中访问时,我会收到nullPointer错误。 - Chintan
在 onStartCommand 中加入 if (intent != null)。但是当你调用 startService 时,onStartCommand 将会被你的 intent 调用。请将你的 logcat 发布出来以解决这个 nullPointerException 问题。 - Hoan Nguyen
当然,如果使用原始代码,由于intent.getExtras为空,您将在intent.getExtras().getStringt()行上获得nullPointerException。 - Hoan Nguyen
继续同样的问题。有人知道如何为服务创建新的Pending Intent,而不是更新现有的Pending Intent吗? - Chintan
以上句子是什么意思? - Hoan Nguyen

1
如果你想传递可以放入Intent的原始数据类型,我建议使用IntentService。在你的活动中启动IntentService,输入以下内容:
startService(new Intent(this, YourService.class).putExtra("test", "Hello work");

然后创建一个继承IntentService类的服务类:

public class YourService extends IntentService {

String stringPassedToThisService;

public YourService() {
    super("Test the service");
}

@Override
protected void onHandleIntent(Intent intent) {

    stringPassedToThisService = intent.getStringExtra("test");

    if (stringPassedToThisService != null) {
        Log.d("String passed from activity", stringPassedToThisService);
    // DO SOMETHING WITH THE STRING PASSED
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接