7

Ho un'app per Android che riproduce l'audio dalla classe dell'applicazione. Ho un PhoneStateListener nella mia classe di applicazione che mette in pausa l'audio quando c'è una telefonata.Android: avvio di una nuova attività dalla classe di applicazione

Desidero avviare un'attività particolare al termine della chiamata, ma non riesco a. ecco il mio codice:

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 
..... 
..... 
} 

Apprezzerei se qualcuno potesse mostrarmi come avviare l'attività nel modo corretto.

Grazie!

+0

io non sono sicuro circa l'approccio corretto al riguardo, come non ho mai fatto, e don Non so se dovresti iniziare un'attività dalla classe dell'applicazione, perché imposti sempre la classe di iscrizione sul manifest, ma considerando che puoi farlo ... hai aggiunto la tua attività al manifest? –

+0

La mia attività è stata aggiunta al manifest. Non è possibile avviare un'attività dalla classe dell'applicazione? – AndroidDev93

+0

Non ho detto che non lo è. Ho detto che non lo so, perché non l'ho mai fatto e dal momento che hai già la classe iniziale sul manifest, definita dall'intenzione:

risposta

18

Ok, so che hai già trovato un'altra soluzione, ma ci stavo girando e ho trovato qualcosa che funzionava per me. Invece di chiamare un intent, ho usato PendingIntent, un filtro intent e un post in attesa. Ecco uno snippit di codice per chiunque altro abbia questo 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(); 
    } 

Poi, nel tuo manifesta solo assicurarsi di impostare il filtro di intenti per l'attività di cattura

<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> 
Problemi correlati