Tôi đã thực sự cố gắng vượt qua intent.putExtra() và getIntent(). GetExtras() và áp dụng chúng vào một trong các hướng dẫn SimpleService. Tôi biết rất nhiều người đã hỏi "tại sao gói bổ sung luôn rỗng?" Tôi hứa tôi đã cố gắng để hack thông qua các câu trả lời tôi tìm thấy ở đây trong vài giờ trước khi tôi xem xét đăng bài nhưng tôi không nghĩ rằng tôi đủ tiên tiến để thực sự hiểu những gì tôi phải làm sai với các đoạn nhỏ người đăng. Vì vậy, tôi đưa vào toàn bộ mã hoạt động của tôi và dịch vụ của tôi.Android - Bắt đầu một dịch vụ với thông tin bổ sung thông qua put/getExtra
Tôi nghĩ rằng vấn đề của tôi là ý định bắt đầu của tôi (mục tôi tạo ra trong hoạt động của mình) không tồn tại trong ngữ cảnh dịch vụ của tôi. Tôi tự hỏi liệu có lẽ tôi đang sử dụng Intents theo hướng sai mục đích? Tôi đã thử một intent.putExtra trong dịch vụ của mình, để cố gắng gửi một chuỗi theo hướng khác, nhưng những tính năng bổ sung đó luôn luôn là null. Vì vậy, với nguy cơ lặp lại, tại sao các gói bổ sung luôn rỗng? Làm cách nào để tạo một mục đích duy nhất tồn tại cả trong ngữ cảnh hoạt động của tôi và dịch vụ của tôi?
Tôi nên lưu ý rằng mã như được hiển thị bên dưới rõ ràng sẽ có phần bổ sung rỗng vì tôi đã nhận xét một số nỗ lực của tôi đối với .getExtras() đã thất bại. Tôi đã xóa phần còn lại vì lợi ích của sự sạch sẽ.
CHỈNH SỬA: Câu trả lời nhờ các câu trả lời, trong mã vì lợi ích của những người cũng đã được Googling trong nhiều giờ. Đặt điều này trong dịch vụ của bạn (xin lưu ý rằng các START_REDELIVER_INTENT trở lại có thể sai):
@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;
}
hoạt động của tôi (dựa trên blog của Sài Geetha của):
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();
}
}
};
}
Và đây là dịch vụ của tôi:
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();
}
}
Chào mừng bạn đến với Stackoverflow! Nếu bạn tìm thấy câu trả lời hữu ích, vui lòng bỏ phiếu. Nếu câu trả lời thành công trả lời câu hỏi của bạn, vui lòng nhấp vào dấu kiểm màu xanh bên cạnh để chấp nhận câu trả lời. Ngoài ra, hãy xem http://stackoverflow.com/questions/how-to-ask để được tư vấn về cách viết một câu hỏi hay –
Kurtis, tôi thích lời mời cổ phiếu của bạn! Tôi rất vui vì ai đó đã dành thời gian để thông báo cho những khách hàng mới về cách sử dụng dịch vụ :) –
@Adam: Tôi không hiểu, xin lỗi: mã dịch vụ của bạn ở cuối không có 'onStartCommand()' ?? –