Я делаю приложение, которое имеет активность и intenservice, который делает некоторые вещи акселерометра в фоновом режиме. Я пытаюсь отправить широковещательную рассылку, чтобы обновить свой интерфейс пользователя от службы до активности. Я создал вещательный приемник внутри метода OnCreate() моей деятельностиBroadcastReceiver внутри действия, не получающие трансляции от службы
public class MainActivity extends Activity {
BroadcastReceiver receiver;
public static String TAG = "vic.zerotosixty";
@Override
protected void onCreate(Bundle savedInstanceState) {
intentFilter = new IntentFilter();
intentFilter.addAction(SpeedService.ACTION_UPDATE_ACCELERATION);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG,"Broadcast Received");
Bundle bundle = intent.getExtras();
double acceleration = (double) bundle.get("acceleration");
speedText.setText((3.6*acceleration) + " Km/h"); //Update text field (3.6 is a unit conversion factor)
}
};
registerReceiver(receiver, intentFilter);
Моя служба выглядит следующим образом:
public class SpeedService extends IntentService implements SensorEventListener {
public final static int METHOD_INITIALIZE = 0;
public final static int METHOD_STOP = 1;
public final static String ACTION_UPDATE_ACCELERATION = "update_acceleration";
public final static String TAG = "vic.zerotosixty";
int initialized = 0;
double x,y,z,a;
//LocalBroadcastManager broadcast;
Intent sendAcceleration;
Sensor accel;
SensorManager sm;
onHandleIntent, кажется, работает нормально
protected void onHandleIntent(Intent intent) {
Bundle bundle = intent.getExtras();
int method = (int) bundle.get("method");
switch(method) {
case METHOD_INITIALIZE:
if (initialized == 0) {initialize();}
break;
default:
break;
}
}
private void initialize() {
Log.d(TAG, "initialized");
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
accel = sm.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
sm.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL);
sendAcceleration = new Intent(this,MainActivity.class);
sendAcceleration.setAction(ACTION_UPDATE_ACCELERATION);
//broadcast = BroadcastManager.getInstance(this);
initialized = 1;
}
Вот где широковещание отправляется от
public void onSensorChanged(SensorEvent event) {
x = event.values[0];
y = event.values[1];
z = event.values[2];
a = Math.sqrt(Math.pow(x,2) + Math.pow(y,2) + Math.pow(z,2));
sendAcceleration.putExtra("acceleration", a);
sendBroadcast(sendAcceleration);
Log.d(TAG,"broadcast sent");
}
От мониторинга logcat, сообщение , отправленное, появляется, но широковещательная передача получена никогда не делает. Неспособность сделать что-то так же просто, как отправить некоторые вещи из службы в какую-либо деятельность, приводит меня к стене. Есть идеи?
** 1) ** использовать '' обслуживания вместо 'IntentService' (IntentService используются для задач Разгрузки от основного потока приложения, в котором это не ваш случай, я считаю) , ** 2) ** использовать шаблон «локальная связанная служба» – pskink