7

Mam aplikację na Androida, która odtwarza dźwięk z klasy aplikacji. Mam PhoneStateListener w mojej klasie aplikacji, która zatrzymuje dźwięk podczas rozmowy telefonicznej.Android: Rozpoczęcie nowej aktywności od klasy aplikacji

Chcę rozpocząć określoną aktywność po zakończeniu połączenia, ale nie mogę tego zrobić. tutaj jest mój kod:

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

Byłbym wdzięczny, gdyby ktoś mógł mi pokazać, jak rozpocząć działalność w prawidłowy sposób.

Dzięki!

+0

nie jestem pewien co do prawidłowego podejścia w tej sprawie, jak nigdy nie zrobił, i Don nie wiesz, czy masz rozpocząć działanie od klasy aplikacji, ponieważ zawsze ustawiłeś klasę wejścia w manifeście, ale biorąc pod uwagę, że możesz to zrobić ... czy dodałeś swoją aktywność do manifestu? –

+0

Moja aktywność została dodana do manifestu. Czy nie można uruchomić działania z poziomu klasy aplikacji? – AndroidDev93

+0

Nie powiedziałem, że nie jest. Powiedziałem, że nie wiem, bo nigdy tego nie zrobiłem i ponieważ masz już klasę początkową w manifeście, zdefiniowaną przez intencję:

Odpowiedz

18

Ok, więc wiem, że znalazłeś już inne rozwiązanie, ale rozglądałem się i znalazłem coś, co zadziałało. Zamiast wywoływać intencje użyłem oczekującego, intencyjnego filtra i oczekującego wpisu. Oto snippit kodu dla każdego, kto ma ten problem.

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(); 
    } 

Następnie w oczywisty tylko upewnij się ustawić filtr przeznaczona do nadrabiania aktywności

<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> 
Powiązane problemy