7

Tengo una aplicación de Android que reproduce audio de la clase de aplicación. Tengo un PhoneStateListener en mi clase de aplicación que pausa el audio cuando hay una llamada telefónica.Android: iniciar nueva actividad desde la clase de aplicación

Quiero comenzar una actividad en particular cuando finaliza la llamada, pero no puedo. aquí está mi código:

public void getPhoneState(){ 

TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
PhoneStateListener phoneStateListener = new PhoneStateListener() { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 

     if (state == TelephonyManager.CALL_STATE_RINGING) { 
      if(audio.isPlaying()) 
       audioPlayer.pause(); 

     } 
      else if(state == TelephonyManager.CALL_STATE_IDLE) { 

       audio.start(); 
       Intent missintent= new Intent(context,AudioActivity.class); 
       missintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(missintent); 


     } 
      else if(state == TelephonyManager.CALL_STATE_OFFHOOK) { 

      if(audio.isPlaying()) 
      audioPlayer.pause(); 

     } 
     super.onCallStateChanged(state, incomingNumber); 


    } 
}; 

if(mgr != null) { 
    mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
} 
} 

public boolean handleAudio(String source, int id) { 

phoneState(); 
//Code for Playing Audio 
..... 
..... 
} 

Agradecería que alguien me mostrara cómo iniciar la actividad de la manera correcta.

Gracias!

+0

No estoy seguro sobre el enfoque correcto en esta materia, como nunca lo hice, y don No sé si se supone que debes iniciar una actividad desde la clase de la aplicación, porque siempre estableces la clase de entrada en el manifiesto, pero teniendo en cuenta que puedes hacerlo ... ¿Agregaste tu actividad al manifiesto? –

+0

Mi actividad se ha agregado al manifiesto. ¿No es posible iniciar una actividad desde la clase de aplicación? – AndroidDev93

+0

No dije que no lo es. Dije que no sé, porque nunca lo hice y dado que ya tienes la clase de inicio en el manifiesto, definida por la intención:

Respuesta

18

Ok, ya sé que ya encontraste otra solución, pero estuve rebuscando y encontré algo que funcionó para mí. En lugar de invocar un intento, utilicé pendingIntent, un filtro de intención y una publicación pendiente. Aquí hay un snippit de código para que alguien más tenga este problema.

Context context = MyApplication.this.getApplicationContext(); 
Intent errorActivity = new Intent("com.error.activity");//this has to match your intent filter 
errorActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 22, errorActivity, 0); 
try { 
    pendingIntent.send(); 
    } 
catch (CanceledException e) { 
     // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

Luego, en el manifiesto sólo asegúrese de configurar el filtro de intención para la actividad de captura de

<activity 
    android:name="UncaughtErrorDialogActivity" 
    android:theme="@android:style/Theme.Dialog" > 
    <intent-filter> 
     <action android:name="com.error.activity" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 
Cuestiones relacionadas