中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-09-06 16:30:23 來源:億速云 閱讀:138 作者:小新 欄目:移動開發

這篇文章給大家分享的是有關Android手電筒如何兼容各個手機與版本的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在寫手電筒APP之前,當然已經參考market上的很多手電筒APP,還有網上如何實現手電筒功能的各種源碼。不管是源碼還是market上的APP,總結了幾點的問題。

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

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

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

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

2.將當前屏幕的背光調節為最亮狀態,退出時在恢復之前的背光值

代碼和布局如下:

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時,是否為自動調節亮度狀態
 */
 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上面的狀態欄 
 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)) //判斷設備是否支持閃光燈
 {
 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();
 }
 
 /**
 * 判斷是否開啟了自動亮度調節
 * 
 * @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;
 }
 
 /**
 * 停止自動亮度調節
 * 
 * @param activity
 */
 public void stopAutoBrightness(Activity activity) {
 Settings.System.putInt(activity.getContentResolver(),
  Settings.System.SCREEN_BRIGHTNESS_MODE,
  Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
 }
 
 /**
 * 恢復自動亮度調節
 * 
 * @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被占用,請先關閉", 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","閃光燈打開");
 
 //先關閉自動調節背光功能,才可以調節背光
 if(AutoBrightnessOpen)
 {
 stopAutoBrightness(MainActivity.this);
 }
 
 //將背光設置為最亮
  WindowManager.LayoutParams lp = getWindow().getAttributes();
  lp.screenBrightness = Float.valueOf(255) * (1f / 255f);
  getWindow().setAttributes(lp);
 }
 }
 
 /**
 * 關閉手電筒
 */
 public void Closeshoudian()
 {
 if (camera != null)
 {
  //關閉閃光燈
  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時背光為自動調節,則退出時需要恢復為自動調節狀態
 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>

感謝各位的閱讀!關于“Android手電筒如何兼容各個手機與版本”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海林市| 九寨沟县| 拜城县| 綦江县| 藁城市| 三河市| 吴桥县| 泸定县| 牙克石市| 札达县| 汶上县| 杭锦旗| 邢台市| 从江县| 新河县| 即墨市| 改则县| 英吉沙县| 绥棱县| 南昌县| 金川县| 新平| 靖江市| 利川市| 广东省| 鲁山县| 宁远县| 咸宁市| 太仓市| 鄢陵县| 东城区| 万山特区| 江陵县| 安达市| SHOW| 宜兰县| 大新县| 昌黎县| 益阳市| 临泉县| 洛隆县|