亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android手電筒兼容各個手機與版本

 更新時間:2019年09月23日 11:48:53   作者:花花大神  
這篇文章主要為大家詳細介紹了Android手電筒兼容各個手機與版本,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在寫手電筒APP之前,當然已經(jīng)參考market上的很多手電筒APP,還有網(wǎng)上如何實現(xiàn)手電筒功能的各種源碼。不管是源碼還是market上的APP,總結(jié)了幾點的問題。

1.我下載market上的所有手電筒APP都是通過Camera打開閃光燈的方式來實現(xiàn)的,但是大部分APP在打開Camera時沒有進行異常處理工作,也沒有任何的提示,如果當其他的程序在使用Camera時,并且返回或點Home后沒有釋放Camera,這時在啟動相應(yīng)的手電筒APP就會出現(xiàn)崩潰或者手電筒功能已經(jīng)失效,這種用戶體驗用戶是不能接受的!

2,網(wǎng)上很多Camera打開閃光燈實現(xiàn)手電筒的源碼,而且原理都是一樣的,當然這些代碼并沒有錯誤,但存在的問題是這些源碼在有的手機版本上能夠?qū)崿F(xiàn)相應(yīng)的功能,在另外的手機版本上就不起作用了,在CSDN資源中的大部分手電筒Demo也都會存在此問題,兼容性不好!

我自己實現(xiàn)的這個手電筒很簡單,沒有任何的UI界面,進入APP后就直接照明,實現(xiàn)的原理就2點:

1.跟其他手電筒APP一樣,用Camera打開閃光燈開始照明

2.將當前屏幕的背光調(diào)節(jié)為最亮狀態(tài),退出時在恢復之前的背光值

代碼和布局如下:

MainActivity.java

package huahua.flashlight;
 
import java.io.IOException;
 
import android.app.Activity;
import android.content.ContentResolver;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.Bundle;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
 
/**
 * 花花手電筒
 * @author huahua
 */
public class MainActivity extends Activity implements SurfaceHolder.Callback{
 private static final String TAG = "huahua"; 
 /**
 * 進入APP時的背光亮度值
 */
 int normal;
 /**
 * 進入APP時,是否為自動調(diào)節(jié)亮度狀態(tài)
 */
 boolean AutoBrightnessOpen = false;
 
 private Camera camera; 
 
 private SurfaceView surfaceView; 
 private SurfaceHolder surfaceHolder; 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 
 //去除title 
 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
  
 //去掉Activity上面的狀態(tài)欄 
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
 WindowManager.LayoutParams.FLAG_FULLSCREEN); 
 
 setContentView(R.layout.activity_main);
 
 surfaceView = (SurfaceView) this.findViewById(R.id.surfaceview); 
 surfaceHolder = surfaceView.getHolder(); 
 surfaceHolder.addCallback(this); 
 surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
 
 if(isAutoBrightness(getContentResolver()))
 {
 AutoBrightnessOpen = true;
 }
 
 normal = Settings.System.getInt(getContentResolver(), 
  Settings.System.SCREEN_BRIGHTNESS, 255); 
 
 PackageManager pm= this.getPackageManager();
 FeatureInfo[] features=pm.getSystemAvailableFeatures();
 for(FeatureInfo f : features)
 {
 if(PackageManager.FEATURE_CAMERA_FLASH.equals(f.name)) //判斷設(shè)備是否支持閃光燈
 {
 Log.d("huahua","支持閃光燈");
 }
 }
 
 }
 @Override
 protected void onPause() {
 // TODO Auto-generated method stub
 super.onPause();
 
 Closeshoudian();
 }
 
 @Override
 protected void onResume() {
 // TODO Auto-generated method stub
 super.onResume();
 
 Openshoudian();
 }
 
 /**
 * 判斷是否開啟了自動亮度調(diào)節(jié)
 * 
 * @param aContext
 * @return
 */
 public boolean isAutoBrightness(ContentResolver aContentResolver) {
 boolean automicBrightness = false;
 try {
  automicBrightness = Settings.System.getInt(aContentResolver,
   Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
 } catch (SettingNotFoundException e) {
  e.printStackTrace();
 }
 return automicBrightness;
 }
 
 /**
 * 停止自動亮度調(diào)節(jié)
 * 
 * @param activity
 */
 public void stopAutoBrightness(Activity activity) {
 Settings.System.putInt(activity.getContentResolver(),
  Settings.System.SCREEN_BRIGHTNESS_MODE,
  Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
 }
 
 /**
 * 恢復自動亮度調(diào)節(jié)
 * 
 * @param activity
 */
 public void setAutoBrightness(Activity activity) {
 Settings.System.putInt(activity.getContentResolver(),
  Settings.System.SCREEN_BRIGHTNESS_MODE,
  Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
 }
 
 /**
 * 打開手電筒
 */
 public void Openshoudian()
 {
 //異常處理一定要加,否則Camera打開失敗的話程序會崩潰
 try {
  Log.d("huahua","camera打開");
 camera = Camera.open(); 
 } catch (Exception e) {
 Log.d("huahua","Camera打開有問題");
 Toast.makeText(MainActivity.this, "Camera被占用,請先關(guān)閉", Toast.LENGTH_SHORT).show();
 }
 
 if(camera != null)
 {
 //打開閃光燈
 camera.startPreview(); 
 Camera.Parameters parameter = camera.getParameters(); 
 parameter.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
 camera.setParameters(parameter);
 Log.d("huahua","閃光燈打開");
 
 //先關(guān)閉自動調(diào)節(jié)背光功能,才可以調(diào)節(jié)背光
 if(AutoBrightnessOpen)
 {
 stopAutoBrightness(MainActivity.this);
 }
 
 //將背光設(shè)置為最亮
  WindowManager.LayoutParams lp = getWindow().getAttributes();
  lp.screenBrightness = Float.valueOf(255) * (1f / 255f);
  getWindow().setAttributes(lp);
 }
 }
 
 /**
 * 關(guān)閉手電筒
 */
 public void Closeshoudian()
 {
 if (camera != null)
 {
  //關(guān)閉閃光燈
  Log.d("huahua", "closeCamera()");
 camera.getParameters().setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
 camera.setParameters(camera.getParameters());
  camera.stopPreview();
  camera.release();
  camera = null;
  
  //恢復進入程序前的背光值
  WindowManager.LayoutParams lp = getWindow().getAttributes();
  lp.screenBrightness = Float.valueOf(normal) * (1f / 255f);
  getWindow().setAttributes(lp);
  
  //如果進入APP時背光為自動調(diào)節(jié),則退出時需要恢復為自動調(diào)節(jié)狀態(tài)
 if(AutoBrightnessOpen)
 {
 setAutoBrightness(MainActivity.this);
 }
 }
 }
 
 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width,
 int height) {
 // TODO Auto-generated method stub
 
 }
 @Override
 public void surfaceCreated(SurfaceHolder holder) {
 try { 
 if(camera != null)
 {
 camera.setPreviewDisplay(holder); 
 }
 } catch (IOException e) { 
 e.printStackTrace(); 
 } 
 
 }
 
 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
 // TODO Auto-generated method stub
 
 }
 
 
}

activity_main.xmlactivity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity" >
 
 <SurfaceView
 android:id="@+id/surfaceview"
 android:layout_width="match_parent"
 android:layout_height="match_parent" 
 android:background="#FFFFFF"/>
 
</LinearLayout>

好了,有興趣的朋友可以下載源碼,代碼中都已加入了詳細的注釋

如果下載后調(diào)試發(fā)現(xiàn)運行不正常,可以反饋一起交流

源碼下載地址

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論