亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

發布時間:2021-09-27 13:45:49 來源:億速云 閱讀:113 作者:小新 欄目:編程語言

小編給大家分享一下Android中如何實現手電筒兼容各個手機與版本,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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

乌鲁木齐县| 龙泉市| 宜君县| 盐池县| 准格尔旗| 万全县| 临潭县| 罗平县| 桂林市| 沈阳市| 灵台县| 广昌县| 曲水县| 安图县| 遂宁市| 务川| 泰安市| 潞西市| 永清县| 吕梁市| 伊春市| 安丘市| 富蕴县| 姜堰市| 阿城市| 仙游县| 磐安县| 桂阳县| 确山县| 六安市| 潜山县| 南乐县| 二手房| 五峰| 巴南区| 宁津县| 洮南市| 娄烦县| 洛扎县| 临安市| 谢通门县|