Android 如何将字符串从mainActivity传递到服务?
如何将在主活动中创建的字符串传递给我的服务? 它是在editText而不是strings.xml中创建的。。。 我是java新手,我找不到它 谢谢 编辑// 我主要有:Android 如何将字符串从mainActivity传递到服务?,android,string,service,Android,String,Service,如何将在主活动中创建的字符串传递给我的服务? 它是在editText而不是strings.xml中创建的。。。 我是java新手,我找不到它 谢谢 编辑// 我主要有: public class MainActivity extends Activity { private static final String LOG_TAG = "aktivita" ; private Button btnStart, btnStop; public EditText input; public Stri
public class MainActivity extends Activity {
private static final String LOG_TAG = "aktivita" ;
private Button btnStart, btnStop;
public EditText input;
public String filename;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);
btnStart.setEnabled(true);
btnStop.setEnabled(true);
input = (EditText) findViewById(R.id.editTxt);
Log.d( LOG_TAG, "ON CREATE" );
}
public void onStartClick(View view) {
filename = input.getText().toString();
Intent serviceIntentAcc = new Intent(this, accService.class );
startService(serviceIntentAcc);
Intent serviceIntentGyro = new Intent(this, gyroService.class );
startService(serviceIntentGyro);
btnStop.setEnabled(true);
btnStart.setEnabled(false);
Log.d(LOG_TAG, "ON START CLICK");
}
我想在我的服务中使用文件名字符串。。。
在这里:
我对android和java还不熟悉,但我不太了解它:/有人能解释一下吗?
谢谢你的耐心。意图是一个很好的方法
public class Service extends IntentService {
private final static String TAG = "a tag";
private final static String GET_POWER_INTENT = "your.intent";
/***
* Constructor
*/
public Service() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d(TAG, "onHandleIntent");
if (extras.containsKey("EXTRA_NAME")) {
// your string can be retrieved with extras.getString("EXTRE_NAME")
}
}
}
并发送您的意图:
Intent serviceIntent = new Intent();
serviceIntent.setClassName(PACKAGE_NAME, CLASS_NAME);
serviceIntent.setAction("your.intent");
serviceIntent.putExtra("EXTRA_NAME", "your string");
context.startService(serviceIntent);
我没有足够的声誉来添加评论 您可以通过intent传递它:
public class MainActivity extends Activity {
public static final String FILENAME = "filename";
private static final String LOG_TAG = "aktivita" ;
private Button btnStart, btnStop;
public EditText input;
public String filename;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);
btnStart.setEnabled(true);
btnStop.setEnabled(true);
input = (EditText) findViewById(R.id.editTxt);
Log.d( LOG_TAG, "ON CREATE" );
}
public void onStartClick(View view) {
filename = input.getText().toString();
Intent serviceIntentAcc = new Intent(this, accService.class );
// add string to intent(filename example)
serviceIntentAcc.putExtra(FILENAME, filename);
startService(serviceIntentAcc);
Intent serviceIntentGyro = new Intent(this, gyroService.class );
startService(serviceIntentGyro);
btnStop.setEnabled(true);
btnStart.setEnabled(false);
Log.d(LOG_TAG, "ON START CLICK");
}
服务:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
// retreive string from intent
String FileName = intent.getStringExtra(FILENAME);
try {
writer = new FileWriter(root + "/" + filename + "acc.txt",true);
} catch (IOException e) {
e.printStackTrace();
}
Log.d(LOG_TAG, "SERVICE - ON START COMMAND");
return START_STICKY;
}
如果您想在服务运行时更新字符串,则需要使用service binder,您可以在本教程中找到更多信息您可以使用intents。这里解释得很好:字符串值正在变化,这取决于我在editText字段中写的内容。。。这样行吗?我编辑了我的答案,因为我不太明白:/I我知道你不能发表评论,但这本质上是一个答案。只要从你发布的链接中解释解决方案,它就可以作为一个答案。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
// retreive string from intent
String FileName = intent.getStringExtra(FILENAME);
try {
writer = new FileWriter(root + "/" + filename + "acc.txt",true);
} catch (IOException e) {
e.printStackTrace();
}
Log.d(LOG_TAG, "SERVICE - ON START COMMAND");
return START_STICKY;
}