|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
APP linterna
Hola a todos.
Pues de antemano, hace mucho que no me pasaba por aqui y tal, bueno, he vuelto jeje Os cuento, en el gs estamos aprendiendo a programar en android ahora, se programar en c++, java, php, pyton... Ahora toca android y estoy haciendo una app simple, muy simple, de una linterna. Se trata de 2 botones y un texto. He estado leyendo y para poder utilizar el hardware del telefono, tengo que comprobar si esta disponible en el telefono. Pero, donde compruebo si esta disponible? se que tengo que poner esta linea Código:
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); El programa en si ya esta, he puesto los permisos en el xml tambien... Código:
<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" />
Os pongo el codigo haber si veis algo raro. Código:
package com.example.holausuario;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText laFrase = (EditText)findViewById(R.id.frase);
final Button elBoton = (Button)findViewById(R.id.el_boton);
final Button elBoton2 = (Button)findViewById(R.id.el_boton2);
final Camera cam = null;
final Parameters param = cam.getParameters();
final PackageInfo context = new PackageInfo;
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
elBoton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View e) {
laFrase.setText("Linterna Enchufada");
cam.setParameters(param);
cam.startPreview();
}
});
elBoton2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View a) {
laFrase.setText("Linterna apagada");
cam.setParameters(param);
cam.stopPreview();
cam.release();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
|
|
|
|
#2
|
||||
|
||||
|
No es que tengas que comprobarlo obligatoriamente, es que si tu app se ejecutara en un dispositivo sin flash se cerraría con un error.
La comprobación es para avisar al usuario de que su teléfono no tiene luz y tu app no puede hacer nada. Yo lo comprobaría antes del setContentView para mostrar el layout de ahora si soporta flash y para mostrar otro layout con un texto diciendo que el teléfono no es compatible en caso contrario. Evidentemente, tienes que meter esa línea en un if/else, porque devuelve true si soporta flash y false en caso contrario. Ejecutar la línea sola no vale para nada.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
|
#3
|
||||
|
||||
|
No es que tengas que comprobarlo obligatoriamente, es que si tu app se ejecutara en un dispositivo sin flash se cerraría con un error.
La comprobación es para avisar al usuario de que su teléfono no tiene luz y tu app no puede hacer nada. Yo lo comprobaría antes del setContentView para mostrar el layout de ahora si soporta flash y para mostrar otro layout con un texto diciendo que el teléfono no es compatible en caso contrario. Evidentemente, tienes que meter esa línea en un if/else, porque devuelve true si soporta flash y false en caso contrario. Ejecutar la línea sola no vale para nada. ![]() Este es el main activity (sin errores) Código:
package com.example.holausuario;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){
setContentView(R.layout.activity_main);
final EditText laFrase = (EditText)findViewById(R.id.frase);
final Button elBoton = (Button)findViewById(R.id.el_boton);
final Button elBoton2 = (Button)findViewById(R.id.el_boton2);
final Camera cam = null;
final Parameters param = cam.getParameters();
//this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
elBoton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View e) {
laFrase.setText("Linterna Enchufada");
cam.setParameters(param);
cam.startPreview();
}
});
elBoton2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View a) {
laFrase.setText("Listerna apagada");
cam.setParameters(param);
cam.stopPreview();
cam.release();
}
});
}
else{
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Código:
<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: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=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<EditText
android:id="@+id/frase"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginLeft="18dp"
android:layout_marginTop="48dp"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/el_boton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/frase"
android:layout_marginTop="54dp"
android:text="encender" />
<Button
android:id="@+id/el_boton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/el_boton"
android:layout_alignBottom="@+id/el_boton"
android:layout_alignRight="@+id/frase"
android:layout_marginRight="19dp"
android:text="apagar" />
<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" />
</RelativeLayout>
Aclarar que para probar la app la paso al movil con la opcion de run as y seleciono el movil (xperia s) Alguna sugerencia? |
![]() |
Estás aquí
|
||||||
|
||||||