#android #android-intent
#Android #android-намерение
Вопрос:
Я хочу транслировать намерение с пользовательскими данными, и только получатель, у которого есть эти пользовательские данные, должен получать это намерение, как это можно сделать?
вот как я транслирую намерение :
Intent intent = new Intent();
intent.setAction("com.example");
context.sendBroadcast(intent);
и я определяю широковещательный приемник следующим образом :
<receiver android:name="com.test.myReceiver" android:enabled="true">
<intent-filter>
<action android:name="com.example"></action>
</intent-filter>
</receiver>
Ответ №1:
Настройте свой класс MyReceiver в основном так, как опубликовал anmustangs.
public class myReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent intent) {
//Do something
}
}
Вам не нужно проверять действие намерения, потому что вы уже отфильтровали его на основе того, что вы включили в свой манифест, по крайней мере, в этом простом случае. У вас могут быть другие действия и фильтры, и в этом случае вам потребуется какая-то проверка полученного намерения.
Если вы хотите, чтобы фильтр фильтровал данные, это описано в документации sdk по фильтрам намерений. Я не силен в типах данных, поэтому любой пример, который я бы привел, был бы относительно плохим. В любом случае, вот ссылка на страницу фильтра намерений манифеста: http://developer.android.com/guide/topics/manifest/intent-filter-element.html
И конкретной страницы для элемента данных; http://developer.android.com/guide/topics/manifest/data-element.html
Комментарии:
1. я хотел фильтровать, используя пользовательские данные, а не пользовательское действие.
2. Хорошо, я отредактировал сообщение, чтобы добавить некоторые ссылки на документацию, если вы хотите фильтровать данные.
3. я видел документацию для Android, прежде чем задать вопрос, дело в том, что в узле данных у них есть path, scheme и pathPrefix. Какой из них я использую для пользовательских данных? можете ли вы привести пример.
4. К сожалению, я не могу… Я не разбираюсь в URI, типах mime и т.д. Я бы сам на самом деле хотел увидеть как простой пример, так и сложный.
Ответ №2:
Если вы уже определили свой класс широковещательного приемника, то следующий шаг — зарегистрировать его в Activity / Service, который вы хотели бы получить от широковещательного намерения. Пример для регистрации:
IntentFilter iFilter = new IntentFilter();
iFilter.addAction("com.example"); //add your custom intent to register
//below is your class which extends BroadcastReceiver, contains action
//which will be triggered when current class received the broadcast intent
MyReceiver myReceiver = new MyReceiver();
registerReceiver(myReceiver, iFilter); //register intent amp; receiver
Если вы уничтожите действие / службу, для лучшей практики не забудьте отменить регистрацию широковещательного приемника в том же действии / службе:
@Override
protected void onDestroy() {
if(myReceiver!=null)
unregisterReceiver(myReceiver)
super.onDestroy();
}
Класс MyReceiver:
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent intent) {
if(intent.getAction().equals("com.example")){
//DO SOMETHING HERE
}
}
}
Комментарии:
1. Приемник, который определен в манифесте, не обязательно регистрировать таким образом. Он будет получать широковещательные сообщения и запускать свой метод onReceive () исключительно на основе записи манифеста.
2. ах, я вижу, это имеет смысл .. максимальное спасибо за исправление