java怎么调用手机手电_android 手电筒的实现
发布日期:2021-06-24 16:33:37 浏览次数:3 分类:技术文章

本文共 3652 字,大约阅读时间需要 12 分钟。

android手机用闪光灯做成手电筒的应用非常多,可是有的不能用。

后来发现是除了把 camera device的 flashmode设置成torch外还要打开预览:

以下是代码:

MainActivity.java

package com.android.flashlight;

import android.app.Activity;

import android.os.Bundle;

import android.view.MotionEvent;

import android.widget.ImageView;

public class MainActivity extends Activity{

private FlashlightSurface mSurface;

private ImageView mImageView;

private boolean isFlashlightOn = false;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Contants.LogI("MainActivity: onCreate()");

mSurface = (FlashlightSurface) findViewById(R.id.surfaceview);

mImageView = (ImageView) findViewById(R.id.image);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

if(MotionEvent.ACTION_UP == event.getAction()){

Contants.LogI("MainActivity: onTouchEvent() : ACTION_UP");

if(isFlashlightOn){

mSurface.setFlashlightSwitch(false);

isFlashlightOn = false;

mImageView.setImageResource(R.drawable.flashlight_off);

}else{

mSurface.setFlashlightSwitch(true);

isFlashlightOn = true;

mImageView.setImageResource(R.drawable.flashlight_on);

}

}

return super.onTouchEvent(event);

}

}

FlashlightSurface.java

package com.android.flashlight;

import android.content.Context;

import android.graphics.PixelFormat;

import android.hardware.Camera;

import android.util.AttributeSet;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

public class FlashlightSurface extends SurfaceView implements SurfaceHolder.Callback{

private SurfaceHolder mHolder;

private Camera mCameraDevices;

private Camera.Parameters mParameters;

public FlashlightSurface(Context context, AttributeSet attrs) {

super(context, attrs);

Contants.LogI("FlashlightSurface");

mHolder = this.getHolder();

mHolder.addCallback(this);

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

Contants.LogI("surfaceChanged");

mParameters = mCameraDevices.getParameters();

if(mParameters != null)

mParameters.setPictureFormat(PixelFormat.JPEG);

mParameters.setPreviewSize(320, 480);

mParameters.setPictureSize(320, 480);

mCameraDevices.setParameters(mParameters);

mCameraDevices.startPreview();

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

Contants.LogI("surfaceCreated");

try {

mCameraDevices = Camera.open();

mCameraDevices.setPreviewDisplay(mHolder);

} catch (Exception e) {

if(mCameraDevices != null)

mCameraDevices.release();

mCameraDevices = null;

}

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

Contants.LogI("surfaceDestroyed");

if(mCameraDevices == null) return;

mCameraDevices.stopPreview();

mCameraDevices.release();

mCameraDevices = null;

}

/**

* 设置手电筒的开关状态

* @param on : true则打开,false则关闭

*/

public void setFlashlightSwitch(boolean on){

if(mCameraDevices == null) return;

if(mParameters == null){

mParameters = mCameraDevices.getParameters();

}

if(on){

mParameters.setFlashMode(Contants.FLASH_MODE_TORCH);

}else{

mParameters.setFlashMode(Contants.FLASH_MODE_OFF);

}

Contants.LogI("setFlashlightSwitch-----------------" + on);

mCameraDevices.setParameters(mParameters);

}

}

布局文件main.xml

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

android:id="@+id/surfaceview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/image"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:src="@drawable/flashlight_off"

android:background="#FFFFFFFF"

/>

显然这里打开了一个预览,可是被图片盖上了,看不见而已。不然闪光灯不亮。

包含widget窗体小部件的使用方法和手电筒的功能实现,安装后,加入?窗体小部件(手电筒)到桌面,然后点击小部件后,打开手电筒的界面

点击界面,实现 打开/关闭 手电筒。

转载地址:https://blog.csdn.net/weixin_33865450/article/details/114663479 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java 字符拼接效率_Java 5种字符串拼接方式性能比较。
下一篇:c语音 web java_目前用来编写Web页面的主要语言是( )。 A.C语言 B.Java C.Delphi D.HTML 请帮忙给出正确答案和分析,谢谢!...

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月15日 16时16分01秒