samsung quitar que prenda para notificaciones notificacion mensajes llaman llamadas las hacer descargar cuando como activar android android-camera

quitar - ¿Cómo encender programáticamente la luz de flash delantera en Android?



flash para llamadas y mensajes (11)

Quiero encender la luz de flash frontal (no con vista previa de la cámara) mediante programación en Android. Busqué en Google pero la ayuda que encontré me remitió a this página

¿Alguien tiene algún enlace o código de muestra?


Android Lollipop introdujo API de camera2 y dejó de utilizar la API de cámara anterior. Sin embargo, el uso de la API en desuso para activar el flash aún funciona y es mucho más simple que usar la nueva API.

Parece que la nueva API está diseñada para ser utilizada en aplicaciones de cámara con funciones completas y que sus arquitectos no consideraron casos de uso más simples, como encender la linterna. Para hacerlo ahora, uno tiene que obtener un CameraManager, crear una CaptureSession con una superficie de relleno y, finalmente, crear e iniciar una CaptureRequest. Manejo de excepciones, limpieza de recursos y largos callbacks incluidos!

Para ver cómo encender la linterna en Lollipop y más reciente, eche un vistazo a FlashlightController en el proyecto AOSP (intente encontrar las API de uso más recientes como antiguas que se hayan modificado). No te olvides de configurar los permisos necesarios.

Android Marshmallow finalmente introdujo una forma sencilla de activar el flash con setTorchMode .


Código completo para la aplicación de linterna android

Manifiesto

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.user.flashlight" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

XML

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OFF" android:id="@+id/button" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:onClick="turnFlashOnOrOff" /> </RelativeLayout>

MainActivity.java

import android.app.AlertDialog; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.security.Policy; public class MainActivity extends AppCompatActivity { Button button; private Camera camera; private boolean isFlashOn; private boolean hasFlash; Parameters params; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); if(!hasFlash) { AlertDialog alert = new AlertDialog.Builder(MainActivity.this).create(); alert.setTitle("Error"); alert.setMessage("Sorry, your device doesn''t support flash light!"); alert.setButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); alert.show(); return; } getCamera(); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isFlashOn) { turnOffFlash(); button.setText("ON"); } else { turnOnFlash(); button.setText("OFF"); } } }); } private void getCamera() { if (camera == null) { try { camera = Camera.open(); params = camera.getParameters(); }catch (Exception e) { } } } private void turnOnFlash() { if(!isFlashOn) { if(camera == null || params == null) { return; } params = camera.getParameters(); params.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(params); camera.startPreview(); isFlashOn = true; } } private void turnOffFlash() { if (isFlashOn) { if (camera == null || params == null) { return; } params = camera.getParameters(); params.setFlashMode(Parameters.FLASH_MODE_OFF); camera.setParameters(params); camera.stopPreview(); isFlashOn = false; } } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onPause() { super.onPause(); // on pause turn off the flash turnOffFlash(); } @Override protected void onRestart() { super.onRestart(); } @Override protected void onResume() { super.onResume(); // on resume turn on the flash if(hasFlash) turnOnFlash(); } @Override protected void onStart() { super.onStart(); // on starting the app get the camera params getCamera(); } @Override protected void onStop() { super.onStop(); // on stop release the camera if (camera != null) { camera.release(); camera = null; } } }


Cuando actualicé mi versión de SDK, el flash de la cámara dejó de funcionar con una excepción de puntero nulo. Descubrí que tenía que configurar targetSDKVersion en 22 en el build.gradle. Cuando probé 23, la aplicación falló.

targetSdkVersion 22


Desde mi experiencia, si su aplicación está diseñada para trabajar tanto en orientación vertical como horizontal, debe declarar la variable cam como estática. De lo contrario, onDestroy() , que se llama al cambiar de orientación, lo destruye, pero no libera la cámara, por lo que no es posible volver a abrirla.

package com.example.flashlight; import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.os.Bundle; import android.app.Activity; import android.content.pm.PackageManager; import android.view.Menu; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { public static Camera cam = null;// has to be static, otherwise onDestroy() destroys it @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void flashLightOn(View view) { try { if (getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA_FLASH)) { cam = Camera.open(); Parameters p = cam.getParameters(); p.setFlashMode(Parameters.FLASH_MODE_TORCH); cam.setParameters(p); cam.startPreview(); } } catch (Exception e) { e.printStackTrace(); Toast.makeText(getBaseContext(), "Exception flashLightOn()", Toast.LENGTH_SHORT).show(); } } public void flashLightOff(View view) { try { if (getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA_FLASH)) { cam.stopPreview(); cam.release(); cam = null; } } catch (Exception e) { e.printStackTrace(); Toast.makeText(getBaseContext(), "Exception flashLightOff", Toast.LENGTH_SHORT).show(); } } }

Para manifestar tuve que poner esta línea.

<uses-permission android:name="android.permission.CAMERA" />

de Camera

Las líneas sugeridas arriba no funcionaban para mí.


En Marshmallow y superior, el `setTorchMode () ''de CameraManager parece ser la respuesta. Esto funciona para mí:

final CameraManager mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); CameraManager.TorchCallback torchCallback = new CameraManager.TorchCallback() { @Override public void onTorchModeUnavailable(String cameraId) { super.onTorchModeUnavailable(cameraId); } @Override public void onTorchModeChanged(String cameraId, boolean enabled) { super.onTorchModeChanged(cameraId, enabled); boolean currentTorchState = enabled; try { mCameraManager.setTorchMode(cameraId, !currentTorchState); } catch (CameraAccessException e){} } }; mCameraManager.registerTorchCallback(torchCallback, null);//fires onTorchModeChanged upon register mCameraManager.unregisterTorchCallback(torchCallback);


Hay diferentes maneras de acceder a Camera Flash en diferentes versiones de Android. Pocas API dejaron de funcionar en Lollipop y luego se modificaron nuevamente en Marshmallow. Para superar esto, he creado una biblioteca simple que he estado usando en algunos de mis proyectos y está dando buenos resultados. Aún está incompleto, pero puedes intentar verificar el código y encontrar las piezas faltantes. Aquí está el enlace - NoobCameraFlash .

Si lo que desea integrar en su código, puede utilizar Gradle para eso. Aquí están las instrucciones (tomadas directamente del archivo Léame):

Paso 1. Agrega el repositorio JitPack a tu archivo de compilación. Agréguelo a su root build.gradle al final de los repositorios:

allprojects { repositories { ... maven { url "https://jitpack.io" } } }

Paso 2. Añadir la dependencia.

dependencies { compile ''com.github.Abhi347:NoobCameraFlash:0.0.1'' }

Uso

Inicialice el singleton NoobCameraManager .

NoobCameraManager.getInstance().init(this);

Opcionalmente, puede establecer el Nivel de registro para el registro de depuración. El registro utiliza la biblioteca LumberJack . El LogLevel predeterminado es LogLevel.None

NoobCameraManager.getInstance().init(this, LogLevel.Verbose);

Después de eso, solo debe llamar al singleton para activar o desactivar el flash de la cámara.

NoobCameraManager.getInstance().turnOnFlash(); NoobCameraManager.getInstance().turnOffFlash();

Tiene que hacerse cargo de los permisos de tiempo de ejecución para acceder a la cámara usted mismo, antes de inicializar NoobCameraManager. En la versión 0.1.2 o anterior, solíamos proporcionar soporte para permisos directamente desde la biblioteca, pero debido a la dependencia del objeto Activity, debemos eliminarlo.

También es fácil alternar Flash

if(NoobCameraManager.getInstance().isFlashOn()){ NoobCameraManager.getInstance().turnOffFlash(); }else{ NoobCameraManager.getInstance().turnOnFlash(); }


He implementado esta función en mi aplicación a través de fragmentos usando SurfaceView. El enlace a esta pregunta de y su respuesta se pueden encontrar here

Espero que esto ayude :)


Para este problema debes:

  1. Compruebe si la linterna está disponible o no?

  2. Si es así, apaga / enciende

  3. Si no, entonces puedes hacer lo que quieras, de acuerdo con las necesidades de tu aplicación.

Para consultar disponibilidad de flash en el dispositivo:

Puedes usar lo siguiente:

context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

que devolverá verdadero si hay un flash disponible, falso si no.

Ver:
http://developer.android.com/reference/android/content/pm/PackageManager.html para obtener más información.

Para encender / apagar la linterna:

Busqué en Google y obtuve esto sobre android.permission.FLASHLIGHT. El permiso de los manifiestos de Android parece prometedor:

<!-- Allows access to the flashlight --> <permission android:name="android.permission.FLASHLIGHT" android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" android:protectionLevel="normal" android:label="@string/permlab_flashlight" android:description="@string/permdesc_flashlight" />

A continuación, hacer uso de la Camera y configurar la this . this . El parámetro principal utilizado aquí es FLASH_MODE_TORCH .

p.ej.

Fragmento de código para encender la linterna de la cámara.

Camera cam = Camera.open(); Parameters p = cam.getParameters(); p.setFlashMode(Parameters.FLASH_MODE_TORCH); cam.setParameters(p); cam.startPreview();

Fragmento de código para apagar la luz led de la cámara.

cam.stopPreview(); cam.release();

Acabo de encontrar un proyecto que utiliza este permiso. Compruebe el código fuente de la configuración rápida. aquí http://code.google.com/p/quick-settings/ (Nota: este enlace ahora está roto)

Para linterna, vea directamente http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/#quick-settings/src/com/bwx/bequick/flashlight (Nota: Este enlace es ahora roto)

Update6 También puede intentar agregar un SurfaceView como se describe en esta respuesta. ¿Una linterna LED en el Galaxy Nexus controlable por la API? Esta parece ser una solución que funciona en muchos teléfonos.

Actualización 5 Actualización importante

He encontrado un enlace alternativo (para los enlaces rotos arriba): http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htm Ahora puede usar este enlazar. [Actualización: 14/9/2012 Este enlace ahora está roto]

Actualización 1

Otro código de OpenSource: http://code.google.com/p/torch/source/browse/

Actualización 2

Ejemplo que muestra cómo habilitar el LED en un Motorola Droid: http://code.google.com/p/droidled/

Otro código de código abierto:

http://code.google.com/p/covedesigndev/
http://code.google.com/p/search-light/

Actualización 3 (Widget para encender / apagar la cámara led)

Si desea desarrollar un widget que encienda / apague el led de su cámara, debe referir mi widget de respuesta para encender / apagar la linterna de la cámara en Android .

Actualización 4

Si desea configurar la intensidad de la luz que emana del LED de la cámara, puede consultar ¿Puedo cambiar la intensidad del LED de un dispositivo Android? post completo Tenga en cuenta que solo los dispositivos HTC rooteados son compatibles con esta función.

** Cuestiones:**

También hay algunos problemas al encender / apagar la linterna. p.ej. para los dispositivos que no tienen FLASH_MODE_TORCH o incluso si tiene, la linterna no se enciende, etc.

Típicamente Samsung crea muchos problemas.

Puede referirse a los problemas en la siguiente lista:

Usa la linterna de la cámara en Android

Encenderá la luz LED / flash / OFF de la cámara en el Samsung Galaxy Ace 2.2.1 y Galaxy Tab


También puede usar el siguiente código para apagar el flash.

Camera.Parameters params = mCamera.getParameters() p.setFlashMode(Parameters.FLASH_MODE_OFF); mCamera.setParameters(params);


Tengo luz AutoFlash con tres sencillos a continuación.

  • Acabo de agregar la cámara y el permiso de Flash en el archivo Manifest.xml

<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-permission android:name="android.permission.FLASHLIGHT"/> <uses-feature android:name="android.hardware.camera.flash" android:required="false" />

  • En tu código de cámara hazlo de esta manera.

    //Open Camera Camera mCamera = Camera.open(); //Get Camera Params for customisation Camera.Parameters parameters = mCamera.getParameters(); //Check Whether device supports AutoFlash, If you YES then set AutoFlash List<String> flashModes = parameters.getSupportedFlashModes(); if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MODE_AUTO)) { parameters.setFlashMode(Parameters.FLASH_MODE_AUTO); } mCamera.setParameters(parameters); mCamera.startPreview();

  • Build + Run -> Now Go to Dim light area y Snap photo, debería obtener flash automático si el dispositivo lo admite.


En API 23 o superior (Android M, 6.0)

Activar el codigo

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String cameraId = null; // Usually back camera is at 0 position. try { cameraId = camManager.getCameraIdList()[0]; camManager.setTorchMode(cameraId, true); //Turn ON } catch (CameraAccessException e) { e.printStackTrace(); } }

Apague el código

camManager.setTorchMode(cameraId, false);

Y permisos

<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.FLASHLIGHT"/>

EDICION ADICIONAL

La gente aún estaba votando mi respuesta, así que decidí publicar un código adicional. Esta fue mi solución para el problema en el pasado:

public class FlashlightProvider { private static final String TAG = FlashlightProvider.class.getSimpleName(); private Camera mCamera; private Camera.Parameters parameters; private CameraManager camManager; private Context context; public FlashlightProvider(Context context) { this.context = context; } private void turnFlashlightOn() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { try { camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); String cameraId = null; // Usually front camera is at 0 position. if (camManager != null) { cameraId = camManager.getCameraIdList()[0]; camManager.setTorchMode(cameraId, true); } } catch (CameraAccessException e) { Log.e(TAG, e.toString()); } } else { mCamera = Camera.open(); parameters = mCamera.getParameters(); parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); mCamera.setParameters(parameters); mCamera.startPreview(); } } private void turnFlashlightOff() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { try { String cameraId; camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); if (camManager != null) { cameraId = camManager.getCameraIdList()[0]; // Usually front camera is at 0 position. camManager.setTorchMode(cameraId, false); } } catch (CameraAccessException e) { e.printStackTrace(); } } else { mCamera = Camera.open(); parameters = mCamera.getParameters(); parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); mCamera.setParameters(parameters); mCamera.stopPreview(); } } }