android - 如何将数据从广播接收器发送到片段?
问题描述
如何将数据从广播接收器发送到片段?在这里,我想将电话号码(OriginatingAddress)发送到另一个片段。
public void onReceive(Context context, Intent intent) {
Bundle intentExtras = intent.getExtras();
if (intentExtras != null) {
Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
String smsMessageStr = "";
for (int i = 0; i < sms.length; ++i) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
String smsBody = smsMessage.getMessageBody().toString();
String phonenumber = smsMessage.getOriginatingAddress();
smsMessageStr += "SMS From: " + phonenumber + "\n";
smsMessageStr += smsBody + "\n";
}
}
}
解决方案
在当前场景中,可以有两种方法向 Fragment 发送数据。
方法一:
您可以将 BroadcastReceiver 注册到托管 Fragment 的活动中,并且在接收到数据后,您可以从如下所示onReceive()
调用该Fragment
方法:Activity
ExampleFragment fragment = (ExampleFragment)getFragmentManager().
findFragmentById(R.id.example_fragment);
fragment.<specific_function_name_of_that_fragment>();
方法二:
您可以直接在 Fragment 中注册 BroadcastReceiver,然后调用其中定义的片段方法,如下所示:
private final BroadcastReceiver broadCastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//receive your data here
}
};
然后onCreateView()
在 Fragment 中注册 BroadcastReceiver,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(broadCastReceiver,
new IntentFilter("YOUR.INTENT.FILTER"));
return inflater.inflate(R.layout.fragment_sub_categories, container, false);
}
然后在onDestroyView()
Fragment 中的 unRegister BroadcastReceiver 中,如下所示:
@Override
public void onDestroyView() {
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(broadCastReceiver);
super.onDestroyView();
}
记住:
片段生命周期将在这里发挥重要作用。为了接收广播,您的片段需要被创建并且对用户可见。当片段将被销毁或对用户不可见时,您将不会收到广播。
推荐阅读
- scala - 仅当来自 KAFKA 主题的新非空消息到达时,如何在结构化流中执行操作?
- bash - shell脚本单for循环如何从文件中获取输出
- oracle - 限制 Oracle 创建编译错误程序
- c++ - 从抽象类创建链
- r - 使用闪亮的应用程序闪亮仪表板在客户端交互式加载文件
- c# - 如何使用 C# 在 MSTest 中获取选定测试用例的列表
- android-auto - 与 Android Auto 一起使用 AOA 来传输数据?
- angular - 如何从 Angular 库中公开 bin javascript 文件
- java - 适用于所有 Android 6.0+ 设备的 Google Play 发布前报告崩溃
- java - 我的应用程序不断崩溃并抛出空对象引用,我不明白为什么?