Android 손전등 은 각 휴대 전화 와 버 전 을 호 환 합 니 다.

7975 단어 Android손전등
손전등 앱 을 쓰기 전에 당연히 마켓 의 많은 손전등 앱,그리고 인터넷 에서 손전등 기능 을 어떻게 실현 하 는 지 에 대한 다양한 소스 코드 를 참고 했다.소스 코드 든 마켓 의 앱 이 든 몇 가지 문 제 를 정리 했다.
1.제 가 market 에 있 는 모든 손전등 앱 을 다 운 받 은 것 은 카메라 로 플래시 를 켜 는 방식 으로 이 루어 졌 습 니 다.그러나 대부분의 앱 은 카 메 라 를 켤 때 이상 처리 작업 을 하지 않 았 고 아무런 알림 도 없 었 습 니 다.만약 에 다른 프로그램 이 카 메 라 를 사용 할 때 돌아 오 거나 홈 을 클릭 한 후에 카 메 라 를 방출 하지 않 았 다 면이때 해당 손전등 앱 을 시작 하면 붕괴 되 거나 손전등 기능 이 효력 을 잃 게 되 는데 이런 사용자 체험 사용 자 는 받 아들 일 수 없습니다!
2.인터넷 에서 많은 Camera 가 플래시 를 켜 서 손전등 의 소스 코드 를 실현 하고 원 리 는 똑 같 습 니 다.물론 이런 코드 는 잘못 되 지 않 았 지만 존재 하 는 문제점 은 이런 소스 코드 가 일부 핸드폰 버 전에 서 해당 하 는 기능 을 실현 할 수 있다 는 것 입 니 다.다른 핸드폰 버 전에 서 는 역할 을 하지 않 습 니 다.CSDN 자원 의 대부분 손전등 Demo 에 도 이런 문제 가 존재 하고 호환성 이 좋 지 않 습 니 다!
제 가 실현 한 이 손전등 은 매우 간단 합 니 다.그 어떠한 UI 인터페이스 도 없고 앱 에 들 어가 면 바로 조명 을 합 니 다.실현 의 원 리 는 바로 2 시 입 니 다.
1.다른 손전등 앱 과 마찬가지 로 카메라 로 플래시 를 켜 고 조명 을 시작한다.
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>
자,관심 있 는 친 구 는 원본 코드 를 다운로드 할 수 있 습 니 다.코드 에 상세 한 설명 이 추가 되 어 있 습 니 다.
다운로드 후 디 버 깅 을 통 해 운행 이 정상 적 이지 않 은 것 을 발견 하면 피드백 과 함께 교류 할 수 있 습 니 다.
소스 코드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기