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

Respuesta
 
Herramientas
  #1  
Viejo 11/10/11, 22:12:44
Array

[xs_avatar]
virolman virolman no está en línea
Miembro del foro
 
Fecha de registro: feb 2009
Mensajes: 59
Modelo de smartphone: LG G3 D855
Tu operador: Tuenti Movil
Lanzando una activity desde un Broadcastreceiver

Muy buenas a todos, he podido leer algo acerca de como lanzar una
Activity desde un BroadcastReceiver, de ahí llegue hasta el punto
donde me encuentro, realmente no pude encontrar el porque mi
aplicación se cierra.
Paso a explicar la idea de la aplicación que, a modo de ejercicio y
aprendizaje estoy haciendo:
La misma consta de una pantalla principal "main" que solo posee un
ToggleButton cuando este cambia de estado a "Encendido" inicia mi
servicio, al pasar a "Apagado" hace lo propio y detiene lo detiene.
Todo esto funciona correctamente, puedo cerrar la aplicación y el
servicio queda corriendo sin problemas y lo puedo detener cuando lo
desee abriendo nuevamente la aplicación.
Ahora bien el servicio "MyService" se queda esperando que el estado
del teléfono cambie, para cada cambio con un mensaje tipo Toast puedo
verificar si mi servicio esta activo, hasta ahí me funciono todo
perfecto salvo cuando agregue las lineas que según algunos foros deben
utilizarse para poder hacer lo que deseo, quiero que cuando el
teléfono reciba una llamada se ejecute una Activity que contiene
simplemente una imagen, ahí es donde la aplicación se cierra, puedo
comprobarlo porque si solo dejo el Toast va de maravilla, me dice que
entro una llamada y hasta el numero telefónico entrante.
Simplificando para hacer lo ultimo cree una clase que recibe el
contexto e intenta lanzar la Activity en cuestión "NewScreen"
Aquí dejo el código de la aplicación, espero puedan ayudarme ya que
llevo varios días si llegar a un gran avance
--------------------------------------------------------------------------- -------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xx.com.xxxxx.myservice"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.VIBRATE"></uses-
permission>
<uses-permission
android:name="android.permission.READ_PHONE_STATE" ></uses-permission>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:label="@string/app_name"
android:screenOrientation="portrait" android:name="Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:screenOrientation="portrait"
android:name="NewScreen">
</activity>
<service
android:label="My Service"
android:enabled="true"
android:name="MyService">
</service>
</application>
</manifest>
--------------------------------------------------------------------------- -------------------------------------------
public class Main extends Activity{
ToggleButton buttonStatus;
ActivityManager ActivityMan;
List<RunningServiceInfo> RunningServices;
boolean isMyServiceRunning = false;
@override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActivityMan = (ActivityManager) this.getSystemService
(ACTIVITY_SERVICE);
RunningServices =
ActivityMan.getRunningServices(Integer.MAX_VALUE);
buttonStatus = (ToggleButton) findViewById(R.id.buttonStatus);
buttonStatus.setOnCheckedChangeListener(listener);
checkServiceRuning();
showStatusService();
}
OnCheckedChangeListener listener = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
showStatusService();
MyService(isChecked);
}
};
public void checkServiceRuning(){
for (RunningServiceInfo runningServiceInfo : RunningServices)
{
if
(runningServiceInfo.service.getClassName().equals( MyService.class.getName() ))
{
isMyServiceRunning = true;
buttonStatus.setChecked(true);
}
}
}
public void MyService(boolean status){
if (status)
startService(new Intent(getApplicationContext(),
MyService.class));
else
stopService(new Intent(getApplicationContext(),
MyService.class));
}
public void showStatusService(){
if(buttonStatus.isChecked()) {
Toast.makeText(Main.this, "Service ON",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(Main.this, "Service OFF",
Toast.LENGTH_SHORT).show();
}
}
}

--------------------------------------------------------------------------- -------------------------------------------
public class MyService extends Service {
BroadcastReceiver phoneStateChangeReceiver;
Bundle extras;
String phoneNumber;
@override
public void onCreate() {
phoneStateChangeReceiver = new PhoneStateChangeReceiver();
registerReceiver(phoneStateChangeReceiver, new
IntentFilter(android.telephony.TelephonyManager.AC TION_PHONE_STATE_CHANGED) );
}
public void onDestroy() {
unregisterReceiver(phoneStateChangeReceiver);
}
public class PhoneStateChangeReceiver extends BroadcastReceiver {
@override
public void onReceive(Context context, Intent intent) {
String newState = intent.getStringExtra("state");
Toast.makeText(getApplicationContext(), "Phone state: " + newState,
Toast.LENGTH_SHORT).show();
if
( android.telephony.TelephonyManager.EXTRA_STATE_RIN GING.equals(newState) )
{
extras = intent.getExtras();
phoneNumber =
extras.getString(TelephonyManager.EXTRA_INCOMING_N UMBER);
Toast.makeText(getApplicationContext(), "Phone number: " +
phoneNumber, Toast.LENGTH_SHORT).show();
showScreen(getApplicationContext());
}
}
}
public void showScreen(Context context){
Intent NewScreen = new Intent(context, MyScreen.class);
NewScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
NewScreen.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP );
context.startActivity(NewScreen);
}
@override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
Responder Con Cita


  #2  
Viejo 12/10/11, 23:21:06
Array

[xs_avatar]
ricardopl65 ricardopl65 no está en línea
Usuario novato en la web
 
Fecha de registro: ene 2009
Mensajes: 2
Modelo de smartphone: g50

En el método showScreen llamas al intent con el nombre de la activity que tienes registrado en el manifest NewScreen. Debería ser más o menos así
public void showScreen(Context context){*
Intent NewLoquesea= new Intent(context, NewScreen.class);*
NewLoquesea.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );*
NewLoquesea.addFlags(Intent.FLAG_ACTIVITY_SINGLE_T OP );*
context.startActivity(NewLoquesea);*
}*
Responder Con Cita
  #3  
Viejo 12/10/11, 23:23:20
Array

[xs_avatar]
ricardopl65 ricardopl65 no está en línea
Usuario novato en la web
 
Fecha de registro: ene 2009
Mensajes: 2
Modelo de smartphone: g50

Los asteriscos no van. no se porque han salido ahi
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 07:58:15 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /