package com.diygreen.android6new.newapi; import android.annotation.TargetApi; import android.content.Context; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraManager; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.widget.CompoundButton; import android.widget.Switch; import android.widget.TextView; import com.diygreen.android6new.R; public class CameraTestActivity extends AppCompatActivity { private Switch mTorchModeSwitch; private TextView mShowTorchModeTV; private CameraManager mCameraManager; private CameraManager.TorchCallback mTorchCallback; private String[] mCameraIdList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cameratest); initView(); initData(); initListener(); } private void initView() { this.mTorchModeSwitch = (Switch) this.findViewById(R.id.switch_torchmode); this.mShowTorchModeTV = (TextView) this.findViewById(R.id.tv_showtorchmode); } @TargetApi(23) private void initData() { mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); mTorchCallback = new CameraManager.TorchCallback() { @Override public void onTorchModeChanged(String cameraId, boolean enabled) { super.onTorchModeChanged(cameraId, enabled); mShowTorchModeTV.setText("Camera:" + cameraId + " TorchMode change :" + enabled); } @Override public void onTorchModeUnavailable(String cameraId) { super.onTorchModeUnavailable(cameraId); } }; try { mCameraIdList = mCameraManager.getCameraIdList(); } catch (CameraAccessException e) { mCameraIdList = null; e.printStackTrace(); } // 注册回调监听 mCameraManager.registerTorchCallback(mTorchCallback, new Handler()); } private void initListener() { this.mTorchModeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (mCameraIdList == null) return; changeTorchMode(isChecked); } }); } @TargetApi(23) private void changeTorchMode(boolean isChecked) { try { mCameraManager.setTorchMode(mCameraIdList[0], isChecked); } catch (CameraAccessException e) { e.printStackTrace(); } } @TargetApi(23) @Override protected void onDestroy() { super.onDestroy(); mCameraManager.unregisterTorchCallback(mTorchCallback); } }