Обратные отправители BroadcastReceiver

Я что-то напутал с моими широковещательными приемниками и отправителем. возможно, другая пара глаз была бы полезна.

У меня есть датчик освещенности, который должен транслировать изменения в принимающую активность.

Вот LightSensor.java

public void onSensorChanged(SensorEvent event) {
    lightLux = event.values[0]; //Final output of this sensor.
    Lux = String.valueOf(lightLux);
    sendLuxUpdate();

    Log.d("LightSensor", Lux);
    TextView tvLightSensorLux = (TextView) findViewById(R.id.tvLightSensorLux);
    tvLightSensorLux.setText(Lux);
}

private void sendLuxUpdate() {
      Log.d("sender", "Broadcasting message");
      Intent intent = new Intent("LuxUpdate");
      // You can also include some extra data.
      intent.putExtra("Lux", lightLux);
      LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }

Затем мой Record.java должен получать эти обновления для lux:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_record);


    LocalBroadcastManager.getInstance(this).registerReceiver(mLightReceiver,
              new IntentFilter("LuxUpdate"));
}

private BroadcastReceiver mLightReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
     // Get extra data included in the Intent
    String lux = intent.getStringExtra("Lux");
    Log.d("Light Lux", "Lux Update: " + lux);
    TextView tvSensorLightLux = (TextView) findViewById(R.id.tvSensorLightLux);
    tvSensorLightLux.setText(lux);
}
};

@Override
protected void onDestroy() {
  // Unregister since the activity is about to be closed.
  LocalBroadcastManager.getInstance(this).unregisterReceiver(mLightReceiver);
  super.onDestroy();
}

Я думаю, что это просто вопрос отправки и получения идентификатора, но я не совсем уверен. Как только действие Record получит трансляцию, оно должно обновить TextView tvSensorLightLux или, по крайней мере, Log.d значение Lux из LightSensor.java.


person Community    schedule 13.01.2014    source источник
comment
в intent.putExtra("Lux", lightLux); есть lightLux есть строка?   -  person Straw Hat    schedule 13.01.2014
comment
Нет, в этом случае это поплавок. Это плохо?   -  person    schedule 13.01.2014
comment
в вашем приемнике String lux = intent.getStringExtra("Lux"); требуется, чтобы имя Lux имело значение String. и, как вы сказали, вы передаете экземпляр float   -  person Straw Hat    schedule 13.01.2014
comment
ты прав. Могу ли я передать поплавок вместо этого?   -  person    schedule 13.01.2014
comment
Кроме того, лучше всего я могу сказать, либо получатель не получает, либо отправитель не транслирует.   -  person    schedule 13.01.2014
comment
да, вы можете пройти Float. Просто в приемнике добавьте String lux =intent.getFloatExtra("Lux", defaultValue); введите значение по умолчанию, которое вы хотите, скажем, 0   -  person Straw Hat    schedule 13.01.2014
comment
Ладно, я понял. Как мне отдать тебе должное за помощь?   -  person    schedule 13.01.2014
comment
Я разместил это как ответ, примите это, поскольку это помогло вам :)   -  person Straw Hat    schedule 13.01.2014


Ответы (1)


Вы передаете Float и в приемнике, который вы используете,

String lux = intent.getStringExtra("Lux");

который требует, чтобы "Lux" было строкой.

Когда вы проходите Float. В приемник Просто добавьте getFloatExtra()

lux =intent.getFloatExtra("Lux", defaultValue); 

введите значение по умолчанию, которое вы хотите, скажем, 0

person Straw Hat    schedule 13.01.2014