android条码扫描器zxing崩溃

android条码扫描器zxing崩溃,android,android-fragments,barcode,zxing,barcode-scanner,Android,Android Fragments,Barcode,Zxing,Barcode Scanner,我找到了一个在我的android项目中实现条形码扫描仪zxing的解决方案 它工作正常,但我有一个问题 **问题** 为什么动作条下面有一条小黑线? 底部的三个触摸菜单图标上方也有相同的条纹 问题二 如果我触摸flash项目,有时它会工作,有时应用程序会崩溃 更新:只有在自动对焦打开且我触摸FLASH项目时,应用程序才会崩溃。关闭自动对焦-没有问题 我的解决方案: if (mAutoFocus == true) { mScannerView.setAutoFoc

我找到了一个在我的android项目中实现条形码扫描仪zxing的解决方案

它工作正常,但我有一个问题

**问题**

为什么动作条下面有一条小黑线? 底部的三个触摸菜单图标上方也有相同的条纹

问题二 如果我触摸flash项目,有时它会工作,有时应用程序会崩溃

更新:只有在自动对焦打开且我触摸FLASH项目时,应用程序才会崩溃。关闭自动对焦-没有问题

我的解决方案:

if (mAutoFocus == true) {
                mScannerView.setAutoFocus(false);
                mScannerView.setFlash(mFlash);
                mScannerView.setAutoFocus(true);
            } else {
                mScannerView.setFlash(mFlash);
            }
崩溃后的日志:

AndroidRuntime: FATAL EXCEPTION: main
                                                                         java.lang.RuntimeException: setParameters failed
                                                                             at android.hardware.Camera.native_setParameters(Native Method)
                                                                             at android.hardware.Camera.setParameters(Camera.java:1551)
                                                                             at me.dm7.barcodescanner.core.BarcodeScannerView.setFlash(BarcodeScannerView.java:118)
                                                                             at me.dm7.barcodescanner.zxing.sample.ScannerFragment.onOptionsItemSelected(ScannerFragment.java:87)
                                                                             at android.support.v4.app.Fragment.performOptionsItemSelected(Fragment.java:2070)
                                                                             at android.support.v4.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentManager.java:2159)
                                                                             at android.support.v4.app.FragmentController.dispatchOptionsItemSelected(FragmentController.java:295)
                                                                             at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:367)
                                                                             at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:147)
                                                                             at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
                                                                             at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
                                                                             at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:68)
                                                                             at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:172)
                                                                             at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:760)
                                                                             at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811)
                                                                             at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
                                                                             at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958)
                                                                             at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:948)
                                                                             at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618)
                                                                             at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:139)
                                                                             at android.view.View.performClick(View.java:4421)
                                                                             at android.view.View$PerformClick.run(View.java:17903)
                                                                             at android.os.Handler.handleCallback(Handler.java:730)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                             at android.os.Looper.loop(Looper.java:213)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5225)
                                                                             at java.lang.reflect.Method.invokeNative(Native Method)
                                                                             at java.lang.reflect.Method.invoke(Method.java:525)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
                                                                             at dalvik.system.NativeStart.main(Native Method)
这是我的密码:

扫描仪碎片活动

public class ScannerFragmentActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        setContentView(R.layout.barcode_scanner);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.barcode_scanner, menu);
        return true;
    }

}
扫描片段

public class ScannerFragment extends Fragment implements ZXingScannerView.ResultHandler {
    private static final String FLASH_STATE = "FLASH_STATE";
    private static final String AUTO_FOCUS_STATE = "AUTO_FOCUS_STATE";
    private static final String SELECTED_FORMATS = "SELECTED_FORMATS";
    private static final String CAMERA_ID = "CAMERA_ID";
    private ZXingScannerView mScannerView;
    private boolean mFlash;
    private boolean mAutoFocus;
    private ArrayList<Integer> mSelectedIndices;
    private int mCameraId = -1;
    MenuItem FlashOn;
    MenuItem FlashOff;
    MenuItem AutoFocusOn;
    MenuItem AutoFocusOff;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) {
        mScannerView = new ZXingScannerView(getActivity());
        if(state != null) {
            mFlash = state.getBoolean(FLASH_STATE, false);
            mAutoFocus = state.getBoolean(AUTO_FOCUS_STATE, true);
            mSelectedIndices = state.getIntegerArrayList(SELECTED_FORMATS);
            mCameraId = state.getInt(CAMERA_ID, -1);
        } else {
            mFlash = false;
            mAutoFocus = true;
            mSelectedIndices = null;
            mCameraId = -1;
        }
        return mScannerView;
    }

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        setHasOptionsMenu(true);
    }

    public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {

        FlashOn = menu.add(R.string.FlashLightOn).setIcon(R.drawable.ic_flash_on_24dp);
        FlashOff = menu.add(R.string.FlashLightOff).setIcon(R.drawable.ic_flash_off_24dp).setVisible(false);

        AutoFocusOn = menu.add(R.string.AutoFocusOn).setIcon(R.drawable.ic_auto_focus_on_24dp);
        AutoFocusOff = menu.add(R.string.AutoFocusOff).setIcon(R.drawable.ic_auto_focus_off_24dp).setVisible(false);

        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.action_flash_on:
                mFlash = !mFlash;
                mScannerView.setFlash(mFlash);

                FlashOn.setVisible(false);
                FlashOff.setVisible(true);
                return true;

            case R.id.action_flash_off:
                mFlash = !mFlash;
                mScannerView.setFlash(mFlash);

                FlashOn.setVisible(true);
                FlashOff.setVisible(false);
                return true;


            case R.id.action_focus_on:
                mAutoFocus = !mAutoFocus;
                mScannerView.setAutoFocus(mAutoFocus);

                AutoFocusOn.setVisible(false);
                AutoFocusOff.setVisible(true);
                return true;

            case R.id.action_focus_off:
                mAutoFocus = !mAutoFocus;
                mScannerView.setAutoFocus(mAutoFocus);

                AutoFocusOn.setVisible(true);
                AutoFocusOff.setVisible(false);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }



    @Override
    public void onResume() {
        super.onResume();
        mScannerView.setResultHandler(this);
        mScannerView.startCamera(mCameraId);
        mScannerView.setFlash(mFlash);
        mScannerView.setAutoFocus(mAutoFocus);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean(FLASH_STATE, mFlash);
        outState.putBoolean(AUTO_FOCUS_STATE, mAutoFocus);
        outState.putIntegerArrayList(SELECTED_FORMATS, mSelectedIndices);
        outState.putInt(CAMERA_ID, mCameraId);
    }

    @Override
    public void handleResult(Result rawResult) {
        try {
            Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            Ringtone r = RingtoneManager.getRingtone(getActivity().getApplicationContext(), notification);
            r.play();
        } catch (Exception e) {}

        // DO SOMETHING
    }




    @Override
    public void onPause() {
        super.onPause();
        mScannerView.stopCamera();
    }

}
公共类ScannerFragment扩展片段实现ZXingScannerView.ResultHandler{
私有静态最终字符串FLASH\u STATE=“FLASH\u STATE”;
私有静态最终字符串AUTO\u FOCUS\u STATE=“AUTO\u FOCUS\u STATE”;
私有静态最终字符串所选格式=“所选格式”;
专用静态最终字符串CAMERA\u ID=“CAMERA\u ID”;
私人ZXingScannerView mScannerView;
私有布尔mFlash;
私有布尔mAutoFocus;
私有数组列表mSelectedIndices;
private int mCameraId=-1;
MenuItem闪光;
MenuItem闪络;
MenuItem自动聚焦;
MenuItem自动聚焦关闭;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、捆绑状态){
mScannerView=newzxingscannerview(getActivity());
如果(状态!=null){
mFlash=state.getBoolean(FLASH_state,false);
mAutoFocus=state.getBoolean(自动聚焦状态,true);
mSelectedIndices=state.getIntegerArrayList(选定的_格式);
mCameraId=state.getInt(摄像机ID,-1);
}否则{
mFlash=false;
mAutoFocus=真;
mSelectedIndices=null;
mCameraId=-1;
}
返回mScannerView;
}
@凌驾
创建时的公共void(捆绑状态){
super.onCreate(state);
设置选项菜单(真);
}
创建选项菜单(菜单菜单,菜单充气机){
FlashOn=menu.add(R.string.FlashLightOn).setIcon(R.drawable.ic_flash_on_24dp);
FlashOff=menu.add(R.string.FlashLightOff).setIcon(R.drawable.ic_flash_off_24dp).setVisible(false);
AutoFocusOn=menu.add(R.string.AutoFocusOn).setIcon(R.drawable.ic_auto_focus_on_24dp);
AutoFocusOff=menu.add(R.string.AutoFocusOff).setIcon(R.drawable.ic_auto_focus_off_24dp).setVisible(false);
super.onCreateOptions菜单(菜单,充气机);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.行动\u闪光\u开启:
mFlash=!mFlash;
mScannerView.setFlash(mFlash);
FlashOn.setVisible(假);
闪光。设置可见(真);
返回true;
案例R.id.行动\闪烁\关闭:
mFlash=!mFlash;
mScannerView.setFlash(mFlash);
FlashOn.setVisible(true);
闪光。设置可见(假);
返回true;
案例R.id.行动重点关注:
mAutoFocus=!mAutoFocus;
mScannerView.setAutoFocus(mAutoFocus);
自动聚焦。设置可见(假);
AutoFocusOff.setVisible(真);
返回true;
案例R.id.action\u focus\u off:
mAutoFocus=!mAutoFocus;
mScannerView.setAutoFocus(mAutoFocus);
自动聚焦。设置可见(真);
自动聚焦关闭。设置可见(假);
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
@凌驾
恢复时公开作废(){
super.onResume();
mScannerView.setResultHandler(此);
mScannerView.startCamera(mCameraId);
mScannerView.setFlash(mFlash);
mScannerView.setAutoFocus(mAutoFocus);
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putBoolean(闪烁状态,mFlash);
putBoolean(自动聚焦状态,mAutoFocus);
outState.putIntegerArrayList(选定的_格式,MSelectedDices);
outState.putInt(摄像头ID,mCameraId);
}
@凌驾
公共无效HandlerResult(结果rawResult){
试一试{
Uri通知=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_通知);
Ringtone r=RingtoneManager.getRingtone(getActivity().getApplicationContext(),通知);
r、 play();
}捕获(例外e){}
//做点什么
}
@凌驾
公共无效暂停(){
super.onPause();
mScannerView.stopCamera();
}
}
条形码扫描仪.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:popupTheme="@style/AppTheme.PopupOverlay" />



    </android.support.design.widget.AppBarLayout>

    <fragment android:name="me.dm7.barcodescanner.zxing.sample.ScannerFragment"
              android:id="@+id/scanner_fragment"
              android:layout_weight="1"
              android:layout_width="match_parent"
              android:layout_height="0dip" />
</LinearLayout>

条形码扫描仪菜单

<?xml version="1.0" encoding="utf-8"?> <menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">


    <item
        android:id="@+id/action_flash_on"
        android:icon="@drawable/ic_flash_on_24dp"
        android:title="@string/FlashLightOn"
        app:showAsAction="always" />

    <item
        android:id="@+id/action_flash_off"
        android:icon="@drawable/ic_flash_off_24dp"
        android:title="@string/FlashLightOff"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_focus_on"
        android:icon="@drawable/ic_auto_focus_on_24dp"
        android:title="@string/AutoFocusOn"
        app:showAsAction="always" />

    <item
        android:id="@+id/action_focus_off"
        android:icon="@drawable/ic_auto_focus_off_24dp"
        android:title="@string/AutoFocusOff"
        app:showAsAction="never" />

</menu>


Add
barcode\u scanner.xml
来自
菜单
res文件夹,而不是布局。我发现了错误!app:showAsAction=“never”/>至app:showAsAction=“always”/>…好的,谢谢您的帮助:)但问题II和问题III有什么问题。有什么想法吗?更正:问题III仅与flash项有关。自动对焦项不会使应用程序崩溃您所说的小黑色条纹是什么意思?它是阴影吗?Post1的图像现在是新的。在这里,您可以看到摄影机活动与另一个“正常”活动之间的差异