在oncreate()中将数据传递给服务

时间:2017-12-11 02:48:10

标签: android

我将数据从主要活动传递给服务。

我在Myservice.java中收到这些错误  1.在覆盖oncreate方法中 - 方法不会覆盖超类  2.运行中的displayedText - 无法解析符号。

Mainactivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);//load the layout file


}
String displayingText = "ABC";
public void StartService(View v) {
    Intent mIntent = new Intent(this, MyService.class);
    startService(mIntent);//(new Intent(this, MyService.class));//use to start the services
    mIntent.putExtra("PassToService",displayingText);
    Toast.makeText(this, "Started", Toast.LENGTH_SHORT).show();
}

MyService.java

 public void onCreate() {
    // cancel if service is  already existed
    if(mTimer!=null)//if mTimer is activated
        mTimer.cancel();
    else
        mTimer=new Timer(); // recreate new timer
    mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(),0,INTERVAL);// schedule task

}

public int onStartCommand (Intent intent, int flags, int startId) {
    String displayingText = intent.getStringExtra("PassToService");
    Toast.makeText(getApplicationContext(), displayingText, Toast.LENGTH_SHORT);
    return START_STICKY;
}

5 个答案:

答案 0 :(得分:1)

您的代码存在问题。

1.更改代码的顺序

public void StartService(View v) {
    Intent mIntent = new Intent(this, MyService.class);
    // edited here
    mIntent.putExtra("PassToService",displayingText);
    startService(mIntent);
    Toast.makeText(this, "Started", Toast.LENGTH_SHORT).show();
}

我的代码

String displayingText = "abc";

public void StartService(View v) {
    Intent mIntent = new Intent(this, MyService.class);
    startService(mIntent);//(new Intent(this, MyService.class));//use to start the services
    mIntent.putExtra("PassToService",displayingText);
    Toast.makeText(this, "Started", Toast.LENGTH_SHORT).show();
}

2.在您的服务清单中注册

<service android:name=".your_package.MyService"/>

注册为

<service
        android:name=".MyService"
        android:enabled="true" />

但是价值没有回报。

答案 1 :(得分:0)

for StartService(View v).... 你还没有在onCreate方法中实现任何动作或事件。

如果您仍然无法解决问题,请使用&#34; Mainactivity.this&#34;在StartService方法中代替。

答案 2 :(得分:0)

您可以将数据传递到服务,如下所示: -

    Intent intent = new Intent(MainActivity.this , GPSTracker.class);
    intent.putExtra(YOURKEY , VALUE);
    startService(intent);

您可以使用onStartCommand()方法获取数据: -

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if(intent != null){
            intent.getStringExtra(YOURKEY)
        }

        return START_STICKY;
    }

我做了如下。但是toast消息没有返回任何字符(没有值)

public int onStartCommand (Intent intent, int flags, int startId) {
    String displayingText = intent.getStringExtra("PassToService");
    Toast.makeText(this, displayingText, Toast.LENGTH_SHORT).show();
    return START_STICKY;
}

答案 3 :(得分:0)

您需要使用onStartCommand从活动到服务获取数据/值。

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
         return START_STICKY;    
}

此后,您可以覆盖oncreate方法并显示内容。

但是您需要记住,在我们的活动中使用startservice方法时,始终会执行oncreate方法

在您的活动中,只需使用以下代码:

private void initializeService(String Index) {
        Intent intent = new Intent(Detail_Test_run.this, Servicelay.class);
        intent.putExtra("Index",Index);
        startService(intent);
        finish();
    }

然后在您的服务中使用:

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        index= intent.getStringExtra("Index");
        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        addView(index);
        return START_STICKY;
    }
@Override
    public void onCreate() {
        super.onCreate();
    }

对我来说效果很好,我从onStartCommand()而不是onCreate()开始调用所有功能

答案 4 :(得分:-2)

我认为您应该使用sharedpreferances,因为数据在后台无法提供服务。 所以在你的startService()方法中:

   public void StartService(View v) {
Intent mIntent = new Intent(this, MyService.class);
startService(mIntent);
SharedPreferences sp=getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
                            SharedPreferences.Editor editor=sp.edit();
                            editor.putString("data",displayingText).commit();
                            editor.apply();}

在您的服务类的onStartCommand()中添加以下行

 SharedPreferences prefs = getSharedPreferences("MyPrefs",MODE_PRIVATE);
    String string = prefs.getString("data","");

希望这会有所帮助:)