2014-02-15 1 views
1

zxing 스캐너를 내 안드로이드 응용 프로그램에 통합했으며 검색 의도가 열리기 전에 onActivityResult (검색을 시작하는 활동에서)가 호출되는 이상한 상황이 나타납니다. 몇 가지 예제를 살펴 보았고 코드는 많은 튜토리얼에서 내가 본 것과 일치하는 것으로 보인다. 다음은 활동 코드입니다. 귀하의 응용 프로그램이 Intent에 대해 이야기 할 필요가있을 때마다zxing을 사용하여 스캔하기 전에 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

여기에서 답을 찾았습니다. http://stackoverflow.com/questions/7910840/android-startactivityforresult- immediately-triggering-onactivityresult – pleasantstranga

답변

2

onActivityResult안드로이드에 의해 호출됩니다. 그것은 많은 장소에서있을 수 있습니다. 요청 코드를보고 IntentIntegrator에있는 코드와 비교하면됩니다. 또는 그 반원들이 당신을 위해이 모든 것을하도록하십시오.

내 생각에 너의 intent-filter은 너 무 광범위하고 예상치 못한 것들을 듣고있다.

관련 문제