【问题标题】:LocalBroadcastReciever not working in fragment本地广播接收器在片段中不起作用
【发布时间】:2015-06-15 22:53:53
【问题描述】:

我正在尝试使用本地广播接收器在 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();
}

条形码本身的扫描成功。问题是能够在编辑文本中显示该条形码。

【问题讨论】:

    标签: android android-fragments android-broadcast


    【解决方案1】:

    您似乎正在取消注册广播接收器。

    看看这个关于onResume and onActivityResult的问题,onActivityResultonResume之前被调用,所以当你的片段注册为接收器时为时已晚。

    尝试将您的广播接收器注册移至 onCreateonDestroy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多