Android: l’Avvio di nuove Attività da Classe di Applicazione

Ho un app android che riproduce l’audio dalla classe di applicazione. Ho un PhoneStateListener nella mia classe di applicazione che mette in pausa l’audio quando c’è una chiamata telefonica.

Voglio iniziare un’attività in particolare quando termina la chiamata, ma non sono in grado di. 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
.....
.....
}

Sarei grato se qualcuno potesse indicarmi come avviare l’attività in modo corretto.

Grazie!

  • Io non sono sicuro circa il corretto approccio a questa materia, come non l’avevo mai fatto, e non so se si suppone che per avviare un’attività dall’applicazione di classe, perché è sempre possibile impostare la classe di ingresso sul manifesto, ma, considerando che si può fare… hai aggiungi il tuo attività per il manifesto?
  • La mia attività è stato aggiunto al manifesto. Non è possibile avviare un’attività dall’applicazione di classe ?
  • Non ho detto che non è così. Ho detto non lo so, perchè non l’ho mai fatto e visto che hai già l’inizio di classe sul manifesto, definito dall’intento: <intent-filter><action android:name=”android.l’intento.azione.MAIN”/><category android:name=”android.l’intento.categoria.LAUNCHER”/></intent-filter>
  • Sto avendo un problema simile, non si trova qualsiasi tipo di soluzione?
  • “ma non posso.” : dovete dirci che cosa sta succedendo. Descrivere + log
  • Ho deciso che sarebbe stato meglio se avessi usato un android di servizio per riprodurre l’audio, ed è diventato meno complicato.
  • ok so che si è passati al servizio, ma sono stato in grado di ottenere qualcosa di funzionante se si cambia la tua mente a vedere la mia risposta.

InformationsquelleAutor AndroidDev93 | 2012-06-20



One Reply
  1. 19

    Ok, so che hai trovato un’altra soluzione già, ma ero cracking intorno e trovare qualcosa che ha funzionato per me. Invece di chiamare un intento che ho usato pendingIntent, un filtro di intento, e in attesa di post. Qui è un codice snippit per chiunque altro di avere 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 manifesto assicuratevi di impostare l’intento filtro per il cattura attività

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

Lascia un commento