欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

Android

當(dāng)前位置:主頁 > 軟件編程 > Android >

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

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:Android|點(diǎn)擊: 次

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

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

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

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

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

2.將當(dāng)前屏幕的背光調(diào)節(jié)為最亮狀態(tài),退出時(shí)在恢復(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時(shí)的背光亮度值
 */
 int normal;
 /**
 * 進(jìn)入APP時(shí),是否為自動(dòng)調(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();
 }
 
 /**
 * 判斷是否開啟了自動(dòng)亮度調(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;
 }
 
 /**
 * 停止自動(dòng)亮度調(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ù)自動(dòng)亮度調(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打開失敗的話程序會(huì)崩潰
 try {
  Log.d("huahua","camera打開");
 camera = Camera.open(); 
 } catch (Exception e) {
 Log.d("huahua","Camera打開有問題");
 Toast.makeText(MainActivity.this, "Camera被占用,請(qǐng)先關(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)閉自動(dòng)調(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時(shí)背光為自動(dòng)調(diào)節(jié),則退出時(shí)需要恢復(fù)為自動(dòng)調(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>

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

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

源碼下載地址

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:Android倒計(jì)時(shí)的開始與停止 剩余時(shí)分秒的展示

欄    目:Android

下一篇:android實(shí)現(xiàn)條目倒計(jì)時(shí)功能

本文標(biāo)題:Android手電筒兼容各個(gè)手機(jī)與版本

本文地址:http://mengdiqiu.com.cn/a1/Android/9180.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有