2015-08-01 4 views
0

Я делаю приложение, которое имеет активность и 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, сообщение , отправленное, появляется, но широковещательная передача получена никогда не делает. Неспособность сделать что-то так же просто, как отправить некоторые вещи из службы в какую-либо деятельность, приводит меня к стене. Есть идеи?

+0

** 1) ** использовать '' обслуживания вместо 'IntentService' (IntentService используются для задач Разгрузки от основного потока приложения, в котором это не ваш случай, я считаю) , ** 2) ** использовать шаблон «локальная связанная служба» – pskink

ответ

0

Фигурные его ...

sendAcceleration = new Intent(this,MainActivity.class); 

должен был

sendAcceleration = new Intent(); 
Смежные вопросы