我将数据从主要活动传递给服务。
我在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;
}
答案 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","");
希望这会有所帮助:)