#android
#Android
Вопрос:
Я использую намерение транслировать данные из потока AsyncTask обратно в основное действие. Трансляция моего действия принята без проблем, но я не вижу данных Uri или последовательности символов. Они оба равны нулю.
На стороне службы в AsyncTask:
public static final String LOCATION_UPDATE = "com.locationTest.lct.LOCATION_UPDATE";
char[] buffer = new char[10];
buffer[0] = 't';
buffer[1] = 'e';
buffer[2] = 's';
buffer[3] = 't';
Intent intent = new Intent(LOCATION_UPDATE);
intent.putExtra("location",buffer);
sendBroadcast(intent);
На стороне активности в основном классе активности:
public static final String LOCATION_UPDATE = "com.locationTest.lct.LOCATION_UPDATE";
public class LocationBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context,Intent intent)
{
Uri data = intent.getData();
CharSequence location = intent.getCharSequenceExtra("location");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iService = startService(new Intent(this,InputService2.class));
IntentFilter filter = new IntentFilter(LOCATION_UPDATE);
LocationBroadcastReceiver r = new LocationBroadcastReceiver();
registerReceiver(r,filter);
Ответ №1:
Это может быть потому, что вы создаете массив символов, а затем пытаетесь получить его в виде последовательности символов. Попробуйте с
String location = new String(intent.getCharArrayExtra("location"));
или что-то подобное, чтобы вы использовали правильный метод get из намерения.
Комментарии:
1. Нет, я заменил вышеупомянутое на char[] location = intent.getCharArrayExtra («местоположение»); и я все еще получаю null. Кроме того, URI также равен null, поэтому проблема вызвана чем-то в настройках.
2. Я нашел это. Я запускал службу перед инициализацией широковещательного приемника. Тогда служба отправила бы первое сообщение (при запуске) до того, как приемник был полностью инициализирован. Ответ заключается в том, чтобы сначала инициализировать приемник, а затем службу. По сути, это было условие гонки между задачей asyc и основным потоком.
3. Ах, я должен был заметить это. Я должен упомянуть, что обычной практикой является регистрация получателя в onResume, а отмена регистрации находится в onPause.