Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Cómo hacer aplicación Linterna en Android
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Cómo hacer aplicación Linterna en Android

Publicar nuevo tema Responder al tema
Foros de discusión » Android, Java, software para smartphones   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Cómo hacer aplicación Linterna en Android Responder citando

Quiero hacer una aplicación para mi móvil Android que encienda el Flash y no se apague, como una especie de linterna ¿cómo puedo hacer esto? no tengo muchos conocimientos de programación.
MensajePublicado:
Mar Ago 09, 2011 9:34 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cómo hacer aplicación Linterna en Android Responder citando



Anuncios



varios escribió:
Quiero hacer una aplicación para mi móvil Android que encienda el Flash y no se apague, como una especie de linterna ¿cómo puedo hacer esto? no tengo muchos conocimientos de programación.


Te mostramos un ejemplo de cómo hacerlo, la base está en usar el modo TORCH de los flash de las cámaras de los dispositivos Android, obviamente no todos los dispositivos soportarán este método pues no todos los flash admiten el modo TORCH (encendido contínuo). Por ello, previamente, comprobamos si el dispositivo cámara del móvil Android soporta es te modo, además de comprobar si soporta cámara.

En el código utilizamos dos botones, uno para encender la linterna (bt


El código Java del fichero "linterna.java" de tu aplicación Android:

Código:

package linternaflash.flash;

import java.util.List;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class LinternaFlash extends Activity
{
       private Button btEncenderLinterna;
       private Button btApagarLinterna;

       private Camera dispCamara;

       /** Called when the activity is first created. */
       @Override
       public void onCreate(Bundle savedInstanceState)
       {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);
           btEncenderLinterna = (Button) findViewById(R.id.btEncenderLinterna);
           btEncenderLinterna.setOnClickListener(new OnClickListener()
           {

               @Override
               public void onClick(View v)
               {
                   processOnClick();
               }
           });

           btApagarLinterna = (Button) findViewById(R.id.btApagarLinterna);
           btApagarLinterna.setOnClickListener(new OnClickListener()
           {

               @Override
               public void onClick(View v)
               {
                   processOffClick();
               }
           });
      }

       @Override
       protected void onResume()
       {
           super.onResume();
           try
           {
              dispCamara = Camera.open();
           }
           catch( Exception e )
           {
              Toast.makeText(getApplicationContext(),
                         "No se ha podido acceder a la cámara",
                         Toast.LENGTH_LONG).show();
           }
       }

       @Override
       protected void onPause()
       {
           if( dispCamara != null )
           {
              dispCamara.release();
              dispCamara = null;
           }
           super.onPause();
       }

       private void processOffClick(){
           if( dispCamara != null ){
               Parameters parametrosCamara = dispCamara.getParameters();
               parametrosCamara.setFlashMode(Parameters.FLASH_MODE_OFF);
               dispCamara.setParameters(parametrosCamara);
           }
           else
           {
              Toast.makeText(getApplicationContext(),
                      "No se ha podido acceder al Flash de la cámara",
                      Toast.LENGTH_LONG).show();
           }
       }

       private void processOnClick()
       {
             Toast.makeText(getApplicationContext(),
                      "Accediendo a la cámara", Toast.LENGTH_LONG).show();
          
           if( dispCamara != null )
           {
                Toast.makeText(getApplicationContext(),
                         "Cámara encontrada", Toast.LENGTH_LONG).show();
              Parameters parametrosCamara = dispCamara.getParameters();
              
              //Get supported flash modes
              List modosFlash = parametrosCamara.getSupportedFlashModes ();
              
              
              if (modosFlash != null &&
                    modosFlash.contains(Camera.Parameters.FLASH_MODE_TORCH))
              {
                //Set the flash parameter to use the torch
                 parametrosCamara.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                   try
                {
                    dispCamara.setParameters(parametrosCamara);
                    dispCamara.startPreview();
                }
                catch (Exception e)
                {
                    Toast.makeText(getApplicationContext(),
                            "Error al activar la linterna",
                            Toast.LENGTH_LONG).show();
                }
              }
              else
              {
                    Toast.makeText(getApplicationContext(),
                            "El dispositivo no tiene el modo de Flash Linterna",
                            Toast.LENGTH_LONG).show();              
              }
           }
           else
           {
              Toast.makeText(getApplicationContext(),
                      "No se ha podido acceder al Flash de la cámara",
                      Toast.LENGTH_LONG).show();
           }          
       }
   }



Para mostrar los dos botones, en el Layout (fichero main.xml) del activity principal pondremos:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/btEncenderLinterna"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Encender linterna" />

<Button
android:id="@+id/btApagarLinterna"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Apagar linterna" />
</LinearLayout>



En los permisos de la aplicación, en el fichero AndroidManifest.xml pondremos:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="linternaflash.flash"
android:versionCode="1"
android:versionName="1.0">


<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".LinternaFlash"
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>

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

</manifest>


Los permisos son "android.permission.CAMERA", "android.hardware.camera" y "android.hardware.camera.autofocus".
MensajePublicado:
Vie Ago 12, 2011 4:56 pm
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Cómo hacer aplicación Linterna en Android Responder citando



Anuncios



alonsojpd escribió:
Te mostramos un ejemplo de cómo hacerlo, la base está en usar el modo TORCH de los flash de las cámaras de los dispositivos Android, obviamente no todos los dispositivos soportarán este método pues no todos los flash admiten el modo TORCH (encendido contínuo). Por ello, previamente, comprobamos si el dispositivo cámara del móvil Android soporta es te modo, además de comprobar si soporta cámara.

En el código utilizam........hardware.camera" y "android.hardware.camera.autofocus".


El código que indicas me funciona muy bien pero cuando el móvil entra en modo ahorro de energía y se apaga la pantalla también se apaga el flash ¿cómo se puede solucionar esto?
MensajePublicado:
Jue Jul 26, 2012 10:20 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cómo hacer aplicación Linterna en Android Responder citando



Anuncios



varios escribió:
El código que indicas me funciona muy bien pero cuando el móvil entra en modo ahorro de energía y se apaga la pantalla también se apaga el flash ¿cómo se puede solucionar esto?


El problema es que en el código falta añadir el parámetro: FOCUS_MODE_INFINITY, te indicamos el código completo de una aplicación Android que activa el flash en modo TORCH y con el parámetro FOCUS_MODE_INFINITY. La aplicación incluye dos botones, uno para encender la cámara y otro para apagarla. Sólo se apagara (una vez encendida) si se pulsa el botón "Apagar" o si se cierra la aplicación:

Código:

package com.example.ajpdsoftlinterna;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.widget.Button;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.widget.Toast;
import java.util.List;

public class AjpdSoftLinterna extends Activity
{
   
    private Button btEncenderLinterna;
    private Button btApagarLinterna;
    private Button btAjpdSoft;

    private Camera dispCamara;
    Parameters parametrosCamara;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ajpdsoft_linterna);
       
        btEncenderLinterna =
           (Button) findViewById(R.id.btEncenderLinterna);
        btEncenderLinterna.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                encenderLinternaAndroid ();
            }
        });

        btApagarLinterna =
           (Button) findViewById(R.id.btApagarLinterna);
        btApagarLinterna.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                apagarLinternaAndroid ();
            }
        });
       
        btAjpdSoft = (Button) findViewById(R.id.btAjpdSoft);
        btAjpdSoft.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
               Intent browserIntent =
                  new Intent(Intent.ACTION_VIEW,
                  Uri.parse("http://www.ajpdsoft.com"));
               startActivity(browserIntent);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(
              R.menu.activity_ajpdsoft_linterna, menu);
        return true;
    }
   
    //Al cerrar la aplicación apagar el flash
    public void finish()
    {
       if (dispCamara != null)
        {
           dispCamara.release();
           dispCamara = null;
        }
        super.finish();
    }
   
    @Override
    protected void onResume()
    {       
        super.onResume();
        try
        {
           dispCamara = Camera.open();
        }
        catch( Exception e )
        {
           //Toast.makeText(getApplicationContext(),
            //          "No se ha podido acceder a la cámara",
            //          Toast.LENGTH_SHORT).show();
        }       
    }   

    private void apagarLinternaAndroid ()
    {
        if (dispCamara != null)
        {
            parametrosCamara = dispCamara.getParameters();
            parametrosCamara.setFlashMode(Parameters.FLASH_MODE_OFF);
            dispCamara.setParameters(parametrosCamara);
        }
        else
        {
           Toast.makeText (getApplicationContext(),
                  "No se ha podido acceder al Flash de la cámara",
                  Toast.LENGTH_SHORT).show();
        }
    }   
   
    private void encenderLinternaAndroid ()
    {
       //Toast.makeText(getApplicationContext(),
       //  "Accediendo a la cámara", Toast.LENGTH_SHORT).show();
       
        if (dispCamara != null)
        {
         //Toast.makeText(getApplicationContext(),
          // "Cámara encontrada", Toast.LENGTH_SHORT).show();

           Parameters parametrosCamara =
              dispCamara.getParameters();
           
           //obtener modos de flash de la cámara
           List<String> modosFlash =
              parametrosCamara.getSupportedFlashModes ();
           
           if (modosFlash != null &&
                 modosFlash.contains(
                       Camera.Parameters.FLASH_MODE_TORCH))
           {
                //establecer parámetro TORCH para el flash de la cámara
             parametrosCamara.setFlashMode(
                   Camera.Parameters.FLASH_MODE_TORCH);
             parametrosCamara.setFocusMode(
                   Camera.Parameters.FOCUS_MODE_INFINITY);
             try
             {
                  dispCamara.setParameters(parametrosCamara);
                  dispCamara.startPreview();
             }
             catch (Exception e)
             {
                 Toast.makeText(getApplicationContext(),
                         "Error al activar la linterna",
                         Toast.LENGTH_SHORT).show();
             }
           }
           else
           {
               Toast.makeText(getApplicationContext(),
               "El dispositivo no tiene el modo de Flash Linterna",
                  Toast.LENGTH_SHORT).show();              
           }
        }
        else
        {
           Toast.makeText(getApplicationContext(),
                  "No se ha podido acceder al Flash de la cámara",
                  Toast.LENGTH_SHORT).show();
        }          
    }   
}
MensajePublicado:
Jue Jul 26, 2012 10:29 pm
Top of PageVer perfil de usuario
chris2611
Usuario


Registrado: Dec 24, 2012
Mensajes: 1

Asunto: No puedo acceder al flash Responder citando

Lo hago todo como lo pone ahi y luego al instalarla en mi movil me pone no se puede acceder al flash.¿Me podrian decir que hacer?
gracia
MensajePublicado:
Lun Dic 24, 2012 4:18 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Android, Java, software para smartphones  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A