Запуск широковещательного приемника от активности в android
Я хотел бы запустить широковещательный приемник из какого-либо мероприятия. У меня есть файл Second.java, который расширяет широковещательный приемник и файл Main.java, из которого я должен инициировать широковещательный приемник.
Я также пробовал делать все в Main.java следующим образом, но не знал, как определить в файле манифеста...
Main.java:
public class Main extends Activity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String rec_data = "Nothing Received";
private BroadcastReceiver myReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if( intent.getStringExtra("send_data")!=null)
rec_data = intent.getStringExtra("send_data");
Log.d("Received Msg : ",rec_data);
}
};
}
protected void onResume() {
IntentFilter intentFilter = new IntentFilter();
//intentFilter.addDataType(String);
registerReceiver(myReceiver, intentFilter);
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
this.unregisterReceiver(this.myReceiver);
}
}
Если я не могу сделать все в одном классе, как указано выше, как я могу назвать широковещательный приемник из Main.java? Может кто-нибудь, пожалуйста, сообщите мне, где я делаю это неправильно? Спасибо!
Ответы
Ответ 1
используйте это, чтобы отправить пользовательскую трансляцию:
Определите имя действия:
public static final String BROADCAST = "PACKAGE_NAME.android.action.broadcast";
Реестр приемника AndroidManifest.xml:
<receiver android:name=".myReceiver" >
<intent-filter >
<action android:name="PACKAGE_NAME.android.action.broadcast"/>
</intent-filter>
</receiver>
Зарегистрировать ресивер:
IntentFilter intentFilter = new IntentFilter(BROADCAST);
registerReceiver( myReceiver , intentFilter);
отправить трансляцию из своей деятельности:
Intent intent = new Intent(BROADCAST);
Bundle extras = new Bundle();
extras.putString("send_data", "test");
intent.putExtras(extras);
sendBroadcast(intent);
ВАШ BroadcastReceiver:
private BroadcastReceiver myReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle extras = intent.getExtras();
if (extras != null){
{
rec_data = extras.getString("send_data");
Log.d("Received Msg : ",rec_data);
}
}
};
для получения дополнительной информации о пользовательской широковещательной передаче см. Пользовательские намерения и широковещание с помощью приемников
Ответ 2
проверьте этот учебник здесь, вы получите всю информацию о трансляции, включая запуск службы из активности или наоборот
http://www.vogella.de/articles/AndroidServices/article.html
Ответ 3
Отметьте этот ответ:
fooobar.com/questions/402187/...
Я думаю, что если вы не укажете ничего в IntentFilter
, вам нужно указать намерение класса приемника.
Ответ 4
Для этого вам нужно передать намерение получателю, см. код ниже: -
Intent intent=new Intent();
getApplicationContext().sendBroadcast(intent);
Вы можете установить действие и другие свойства Intent и транслироваться с использованием контекста приложения. Какое бы действие Intent вы не установили здесь, которое вы должны определить в AndroidManifest.xml с тегом приемника.