Android 6.0 闪光灯的使用

Android6.0 已经抛弃了Camer 相关的API,改用新的API接口CamerManager,下面给出使用的简单实例

package com.inper.duqiang.slashlight;

import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ToggleButton;

public class MainActivity extends Activity {

    private CameraManager manager;
    private Camera camera = null;
    private Camera.Parameters parameters = null;
    public static boolean kaiguan = true; // 定义开关状态,状态为false,打开状态,状态为true,关闭状态

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        super.onCreate(savedInstanceState);

        manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);

        try {
            String [] camerList = manager.getCameraIdList();
            for (String str:camerList
                 ) {
                Log.d("List",str);
            }
        } catch (CameraAccessException e) {
            Log.e("error",e.getMessage());
        }
        Button open_btn = (Button) findViewById(R.id.open_btn);

        open_btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                if (isLOLLIPOP()) {
                    try {
                        manager.setTorchMode("0", true);
                    } catch (CameraAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        Button close_btn = (Button) findViewById(R.id.close_btn);
        close_btn.setOnClickListener(closeOnClickListener);

        ToggleButton toggle_btn = (ToggleButton) findViewById(R.id.toggle_btn);
        toggle_btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                try {
                    manager.setTorchMode("1", isChecked);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private View.OnClickListener closeOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isLOLLIPOP()) {
                try {
                    manager.setTorchMode("0", false);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    };
    /**
     * 判断Android系统版本是否 >= LOLLIPOP(API21)
     *
     * @return boolean
     */
    private boolean isLOLLIPOP() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            return true;
        } else {
            return false;
        }
    }
}

Layout的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.inper.duqiang.slashlight.MainActivity">

    <ToggleButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/toggle_btn"/>
    <Button
        android:layout_below="@+id/toggle_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开闪光灯"
        android:id="@+id/open_btn"/>
    <Button
        android:layout_below="@+id/toggle_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/open_btn"
        android:text="关闭闪光灯"
        android:id="@+id/close_btn"/>
</RelativeLayout>

Anf文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.inper.duqiang.slashlight">

    <!-- 打开Camera的权限 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.autofocus" />

    <!-- 开启闪光灯权限 -->
    <uses-permission android:name="android.permission.FLASHLIGHT" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
时间: 2024-10-10 12:54:26

Android 6.0 闪光灯的使用的相关文章

Android 5.0特性

虽然此前Google对其已经做过了比较深入的介绍,但作为一个如此重要的升级版本,更新内容自然是海量的. Google今天很贴心地在官网上放出了Android 5.0正式版的完整更新日志,涵盖了升级的方方面面,不过说实话也只是一些重要的.大面上的概略更新介绍,还有更多细节等待挖掘. 1.Material Design 醒目的.多彩的.快速响应的UI设计,可为你所有的设备带来一致的直觉体验. - 响应快速.自然流畅的动作,真实的光照和阴影,熟悉的视觉元素,设备导航更加轻而易举. - 惊艳的新色彩,凸

Android 6.0 动态权限申请注意事项

<span style="font-size:24px;color:#ffff00;background-color: rgb(0, 0, 153);"><strong>Android 6.0 权限区分</strong></span> Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应用以获

Android 6.0中的新技术有哪些

最近 Google 正式发布了 Android M,并命名为"棉花糖"(Marshmallow),对于开发者来说,有哪些新的技术和变化呢?本文尝试总结一下 Android 6.0(API 23)给开发者带来新的技术和改变. 权限管理 权限管理是 Android M 最大的改变,权限管理更加精细,并且由以前的安装时静态授权,改为现在的运行时动态授权.大家对 Android 的权限吐槽已久,Android 应该能极大的改善这方面的问题.主要改变有: 系统设置中可以对 APP 各个权限单独控

Android 6.0 应用权限(二) -- 与系统权限一起工作(Working with System Permissions) 使用MarkDown重新整理了排版

为了保护系统集成度和用户的隐私,Android在一个受限访问的沙箱中运行每个程序.如果这个应用想要使用它的沙箱外的其他资源或信息,就必须显性地请求权限.依赖于应用请求的权限类型,系统可能会自动地授权或者通过询问用户来授权 本节向你展示如何为你的应用声明和授予权限. Declare Permissions(声明权限) 每个Android应用都运行在一个受限访问的沙箱中..如果这个应用想要使用它的沙箱外的其他资源或信息,就需要请求正确的权限.你可以通过在App Manifest中列出这些权限来声明你

Android 5.0系统特性全解析

Android 5.0 Lollipop是今年最为期待的产品升级之一.它将带来全新的设计语言,更多人性化的功能,以及最纯正的Google味道. 最近Google陆续发布的Inbox.新版Gmail和今天公布的新版Google Calendar,都让人认识到Material Design的魅力.到底Android 5.0比之前的版本有多大的变化?来看看Engadget是怎么说的. Material Design 正如Engadget所说,Google计划将在所有的产品当中采用Material De

Android 6.0 运行时权限处理完全解析

一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android-6.0-changes.html,其中当然包含Runtime Permissions. ok,本篇文章目的之一就是对运行时权限处理的一个介绍,以及对目前权限相关的库

android 6.0 系统获取权限

在Android 6.0 (API 23) 发布之前, 所有的权限都在安装应用的时候显示给用户,用户选择安装则表示全部接受这些权限, 之后无法撤销对这些权限的授权.但Android 6.0开始, 一部分比较危险的权限需要在程序运行时显式弹框,请求用户授权.所以,之前开发应用时,在manifest文件中配置对应的权限这种做法便达不到之前的效果.那么,现在要怎么做呢?提供两种思路,仅供参考: 1:判断android系统的版本,如果不是6.0及以上,按正常逻辑处理,如果是,则去打开系统弹框,请求系统权

解决Android 5.0中出现的警告:Service Intent must be explicit

extends:http://www.eoeandroid.com/thread-568853-1-1.html 本帖最后由 469874851 于 2015-3-11 18:15 编辑 有些时候我们使用Service的时需要采用隐私启动的方式,但是Android 5.0一出来后,其中有个特性就是Service Intent  must be explitict,也就是说从Lollipop开始,service服务必须采用显示方式启动.而android源码是这样写的(源码位置:sdk/source

修复android 5.0 Xutils的框架问题retry error, curr request is null

Android 5.0手机对xUtils-2.6.13.jar请求时会出现retry error, curr request is null 情况, 修复解决方式: 找到library/src/com/lidroid/xutils/cache/KeyExpiryMap.java 感兴趣的关注一下微信订阅号爱开发:微信号:aikaifa 或扫描一下以下二维码: jar包下载