| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

Android 通用型手电筒代码

用相机功能来实现的,大部分机型都支持。
MainActivity.class 

public class MainActivity extends FragmentActivity {        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);            if (isFlashSupported()) {              if (savedInstanceState == null) {                  getSupportFragmentManager().beginTransaction().add(R.id.container, new FlashlightFragment()).commit();              }          } else {              showNoFlashAlert();          }      }        private void showNoFlashAlert() {          new AlertDialog.Builder(this)                  .setMessage(R.string.device_not_support_msg)                  .setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.device_not_support_title)                  .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {                        @Override                      public void onClick(DialogInterface dialog, int which) {                          dialog.dismiss();                          finish();                      }                  }).create().show();      }        private boolean isFlashSupported() {          PackageManager pm = getPackageManager();          return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);      }        public static class FlashlightFragment extends Fragment implements SurfaceHolder.Callback {            public FlashlightFragment() { }            ImageButton btnSwitch;          ImageView bg;          private boolean isLighOn = false;            private Camera camera;          Camera.Parameters params;            @Override          public void onStart() {              super.onStart();              SurfaceView preview = (SurfaceView) getView().findViewById(R.id.PREVIEW);              SurfaceHolder mHolder = preview.getHolder();              mHolder.addCallback(this);          }            @Override          public void onPause() {              super.onPause();              turnOffFlash();          }            @Override          public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {              View view = inflater.inflate(R.layout.fragment_main_activity, container, false);                // flash switch button              btnSwitch = (ImageButton) view.findViewById(R.id.flashlight_button);                bg = (ImageView) view.findViewById(R.id.flashlight_bg);                // displaying button image              toggleBgImage();                // Switch button click event to toggle flash on/off              btnSwitch.setOnClickListener(new View.OnClickListener() {                    @Override                  public void onClick(View v) {                      if (isLighOn) {                          turnOffFlash();                      } else {                          turnOnFlash();                      }                  }              });                return view;          }            // Turning On flash          private void turnOnFlash() {                if (!isLighOn) {                  if (camera == null || params == null) {                      return;                  }                  params = camera.getParameters();                  params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);                  camera.setParameters(params);                  camera.startPreview();                  isLighOn = true;                    toggleBgImage();              }            }            // Turning Off flash          private void turnOffFlash() {                if (isLighOn) {                  if (camera == null || params == null) {                      return;                  }                    params = camera.getParameters();                  params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);                  camera.setParameters(params);                  camera.stopPreview();                  isLighOn = false;                    toggleBgImage();              }          }            private void toggleBgImage() {              if (isLighOn) {                  bg.setImageResource(R.mipmap.f_on);              } else {                  bg.setImageResource(R.mipmap.f_off);              }          }            @Override          public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            }            @Override          public void surfaceDestroyed(SurfaceHolder holder) {              if (camera != null) {                  camera.stopPreview();                  camera.setPreviewCallback(null);                  camera.release();                  camera = null;              }          }            @Override          public void surfaceCreated(SurfaceHolder holder) {              if (camera == null) {                  camera = Camera.open();                  params = camera.getParameters();                  try {                      camera.setPreviewDisplay(holder);                  } catch (IOException e) {                      camera.release();                      camera = null;                  }              }                turnOnFlash();          }        }      }

fragment_main_activity.xml

<RelativeLayout   xmlns:android="http://schemas.android.com/apk/res/android"   android:layout_width="match_parent"   android:layout_height="match_parent"   >     <SurfaceView    android:id="@+id/PREVIEW"    android:layout_width="1dp"    android:layout_height="1dp"/>     <ImageView    android:id="@+id/flashlight_bg"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:src="@mipmap/f_on"    android:scaleType="centerCrop"    />     <ImageButton    android:id="@+id/flashlight_button"    android:layout_width="100dp"    android:layout_height="200dp"    android:layout_centerInParent="true"    android:background="@android:color/transparent"    android:text="fuck"/>    </RelativeLayout>

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:id="@+id/container"      android:layout_width="match_parent"      android:layout_height="match_parent"      />  

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>  <manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.liujinghuiuncleapp.app.tool.flashlight" >        <uses-permission android:name="android.permission.CAMERA" />      <uses-permission android:name="android.permission.FLASHLIGHT" />        <uses-feature android:name="android.hardware.camera" />      <uses-feature android:name="android.hardware.camera.flash" />        <application          android:allowBackup="true"          android:icon="@mipmap/ic_launcher"          android:theme="@style/AppTheme"          android:label="@string/app_name" >          <activity              android:name=".MainActivity"              android:label="@string/app_name" >              <intent-filter>                  <action android:name="android.intent.action.MAIN" />                    <category android:name="android.intent.category.LAUNCHER" />              </intent-filter>          </activity>      </application>    </manifest>