真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android手電筒如何兼容各個手機(jī)與版本

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

成都創(chuàng)新互聯(lián)公司專注于通州企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站開發(fā)。通州網(wǎng)站建設(shè)公司,為通州等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

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

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

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

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

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

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

代碼和布局如下:

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"; 
 /**
 * 進(jìn)入APP時的背光亮度值
 */
 int normal;
 /**
 * 進(jìn)入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);
 }
 
 /**
 * 恢復(fù)自動亮度調(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;
  
  //恢復(fù)進(jìn)入程序前的背光值
  WindowManager.LayoutParams lp = getWindow().getAttributes();
  lp.screenBrightness = Float.valueOf(normal) * (1f / 255f);
  getWindow().setAttributes(lp);
  
  //如果進(jìn)入APP時背光為自動調(diào)節(jié),則退出時需要恢復(fù)為自動調(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


 
 
 

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


分享標(biāo)題:Android手電筒如何兼容各個手機(jī)與版本
URL分享:http://weahome.cn/article/ihsedh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部