LocalBroadcastReciever 不能在片段中工作
LocalBroadcastReciever not working in fragment
我正在尝试使用本地广播接收器在 editText 字段(片段内)内显示扫描的条形码。
这是我的代码:
MainActivity.java
中的 OnActivityResult
public void onActivityResult(int requestCode, int resultCode, Intent intent){
Log.d("onActivityResultCalled", "yes");
if(requestCode == IntentIntegrator.REQUEST_CODE){
if (resultCode == RESULT_OK){
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
Log.d("content", contents);
Log.d("format", format);
Log.d("sender", "Broadcasting message");
Intent scanIntent = new Intent("scanEvent");
scanIntent.putExtra("isbn",contents);
LocalBroadcastManager.getInstance(this).sendBroadcast(scanIntent);
}else if(resultCode == RESULT_CANCELED){
Log.e("MainActivity","Scan cancelled?");
}
}
}
接收广播和显示 isbn 的代码:
@Override
public void onResume()
{
super.onResume();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mMessageReceiver,
new IntentFilter("scanEvent"));
}
// Our handler for received Intents. This will be called whenever an Intent
// with an action named "scanEvent" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
isbnData = intent.getStringExtra("isbn");
Log.d("receiver", "Got message: " + isbnData);
isbn.setText(isbnData);
}
};
@Override
public void onPause() {
// Unregister since the activity is about to be closed.
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mMessageReceiver);
super.onDestroy();
}
条形码本身扫描成功。问题是能够在编辑文本中显示该条形码。
您似乎要取消注册您的广播接收器。
查看有关 onResume and onActivityResult 的问题,onActivityResult
在 onResume
之前被调用,因此当您的片段注册为接收者时为时已晚。
尝试将您的广播接收器注册移至 onCreate
和 onDestroy
。
我正在尝试使用本地广播接收器在 editText 字段(片段内)内显示扫描的条形码。
这是我的代码:
MainActivity.java
中的 OnActivityResultpublic void onActivityResult(int requestCode, int resultCode, Intent intent){
Log.d("onActivityResultCalled", "yes");
if(requestCode == IntentIntegrator.REQUEST_CODE){
if (resultCode == RESULT_OK){
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
Log.d("content", contents);
Log.d("format", format);
Log.d("sender", "Broadcasting message");
Intent scanIntent = new Intent("scanEvent");
scanIntent.putExtra("isbn",contents);
LocalBroadcastManager.getInstance(this).sendBroadcast(scanIntent);
}else if(resultCode == RESULT_CANCELED){
Log.e("MainActivity","Scan cancelled?");
}
}
}
接收广播和显示 isbn 的代码:
@Override
public void onResume()
{
super.onResume();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mMessageReceiver,
new IntentFilter("scanEvent"));
}
// Our handler for received Intents. This will be called whenever an Intent
// with an action named "scanEvent" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
isbnData = intent.getStringExtra("isbn");
Log.d("receiver", "Got message: " + isbnData);
isbn.setText(isbnData);
}
};
@Override
public void onPause() {
// Unregister since the activity is about to be closed.
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mMessageReceiver);
super.onDestroy();
}
条形码本身扫描成功。问题是能够在编辑文本中显示该条形码。
您似乎要取消注册您的广播接收器。
查看有关 onResume and onActivityResult 的问题,onActivityResult
在 onResume
之前被调用,因此当您的片段注册为接收者时为时已晚。
尝试将您的广播接收器注册移至 onCreate
和 onDestroy
。