Задача состоит в том, чтобы как-то обработать «share» намерение в уже запущенном услуге.Отправлять «намерение долевого участия» (ACTION_SEND) от операции до обслуживания
Что касается ACTION_SEND
- это действие, которое мы должны предпринять, чтобы забрать намерение в действии и передать его на службу.
Проблема заключается в том, что логически реализовать всю обработку «совместного использования» в сервисе и использовать деятельность только для целей трансляции.
Таким образом, служба должна получать намерение (которое ранее принималось и транслировалось по видам деятельности), поэтому мы можем позвонить ему getType()
и get****Extra***()
, чтобы узнать, что на самом деле было общим, и обработать эти данные каким-то образом.
Целью, которую мы получили в деятельности, является действие ACTION_SEND
(или ACTION_SEND_MULTIPLE
), правильно? Поэтому логически мы можем изменить действие с помощью вызова setAction()
на объект намерения и передать его нашему сервису, который уже прослушивает это конкретное действие.
public class HandleShareIntentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Intent broadcastIntent = new Intent(intent);
// If I initialize empty intent there is no problem,
// I'll receive it in service
// Intent broadcastIntent = new Intent();
broadcastIntent.setAction(Constants.ACTION_SHARE);
broadcastIntent.setFlags(0);
sendBroadcast(broadcastIntent);
finish();
}
// ...
}
Но это не работает, я не получаю это намерение в эксплуатации. Если я не копирую намерения, я получил и транслировал пустую, я получаю ее в своем сервисе.
Что я делаю неправильно?
Крысы, у меня был тот же ответ * почти * сделано, когда у вас появился :-) В любом случае, это правильный ответ, пожалуйста, примите его. – jjm
Моя служба уже запущена, и она не должна отвечать на широковещательные передачи, просто для беспроблемного обработки данных. Причина, по которой я не запускаю службу каждый раз, когда я получаю событие общего доступа, потому что запущенная служба содержит данные, которые немного сложно инициализировать (служба запускается, когда внешнее хранилище USB связано с кабелем OTG, служебное чтение и анализ данных в соответствии с разделом файловой системы fat32 используя UsbDeviceConnection и bulkTransfer. Поэтому, когда я получаю намерение поделиться, я готов обработать его и, например, скопировать данные на usb. Если я инициализирую эти данные для каждого общего события, это займет немного времени). – nicolausYes
Я понял, как это сделать с помощью startService. Можно ли это сделать с запуском службы? Могу ли я использовать sendBroadcast или использовать bindService? – nicolausYes