在使用zxing扫描之前调用onActivityResult

时间:2014-02-15 16:54:00

标签: android zxing

我正在将zxing扫描器集成到我的android应用程序中,我遇到了一个奇怪的情况,即在扫描意图打开之前调用onActivityResult(在启动扫描的活动中)。我看了几个例子,我的代码似乎与我在许多教程中看到的相匹配。以下是活动的代码。

package com.honeydewit;

import java.util.ArrayList;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.honeydewit.adapters.ListItemAdapter;
import com.honeydewit.listeners.OneOffClickListener;
import com.honeydewit.pojos.BasicList;
import com.honeydewit.pojos.ListItem;

public class ListHomeActivity extends BasicActivity{
   private ImageButton addItemBtn;
    private ImageButton addByScanBtn;
        private ArrayList<ListItem> lists = new ArrayList<ListItem>();
        public static  ListItemAdapter listAdapter;
private TextView headerTxt;
private BasicList basicList;
private ListView listView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listshome);
    listView =(ListView) findViewById(R.id.list);
    basicList = getApplicationContext().getCurrentList();
    headerTxt = (TextView)findViewById(R.id.headerTxt);
    headerTxt.setText(basicList.getName());
    headerTxt.setTypeface(getApplicationContext().getTypeface());
    //add button
    addItemBtn = (ImageButton)findViewById(R.id.add);
    addItemBtn.setOnClickListener(new OneOffClickListener() {

        @Override
        public void onClick(View v) {

            addToList(v, basicList);

        }
    });
    addByScanBtn = (ImageButton)findViewById(R.id.addByScan);
    addByScanBtn.setVisibility(View.VISIBLE);
    addByScanBtn.setOnClickListener(new OneOffClickListener() {

        @Override
        public void onClick(View v) {

            addToListByScan(v, basicList);

        }
    });
    setupListAdapter(basicList.get_id());


}


private void setupListAdapter(int listId) {
    populateListItems(listId);
    listAdapter = new ListItemAdapter(this, R.layout.listrow, lists);
    listView.setAdapter(listAdapter);
}


private void populateListItems(int listId) {
    ArrayList<ListItem> items = (ArrayList<ListItem>)getApplicationContext().getShoppingListDbHelper().getShoppingListItems(listId);
    for(ListItem item : items ) {
        lists.add(item);
    }
}


private void addToList(View view, BasicList list) {

    if(basicList.getListTypeId() == Constants.TODO_LIST_TYPE_CDE) {
        Intent newListIntent = new Intent(getBaseContext(), ToDoItemActivity.class);
        startActivityForResult(newListIntent, 1);
    }
    else {
        Intent newListIntent = new Intent(getBaseContext(), ItemActivity.class);
        startActivityForResult(newListIntent, 1);
    }

}
private void addToListByScan(View view, BasicList list) {
    try {

        IntentIntegrator zxingIntegrator = new IntentIntegrator(this);  
        zxingIntegrator.initiateScan();

    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(getApplicationContext(), "ERROR:" + e, 1).show();

    }

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
            Log.d(getClass().getName(), scanResult.getContents());
            Log.d(getClass().getName(), scanResult.getFormatName());
            Log.d(getClass().getName(),data.getStringExtra("SCAN_RESULT_FORMAT"));
            Log.d(getClass().getName(),data.getStringExtra("SCAN_RESULT"));
        }
    }

}



}

1 个答案:

答案 0 :(得分:2)

每当您的应用需要被告知onActivityResult时, Android 都会调用

Intent。那可能来自很多地方。您可以通过查看请求代码并将其与IntentIntegrator中的代码进行比较来了解。或者让那个班为你做这一切。

我的猜测是你的intent-filter过于宽泛而且你听到了你不期望的事情。