7

Pracuję nad aplikacją, w której muszę zastąpić INCOMING CALL SCREEN.Przenieś domyślny ekran przychodzących wiadomości na telefon na telefonie PhoneManager.CALL_STATE_RINGING w Androidzie

Gdy urządzenie odbiera połączenie, muszę wyświetlić okienko wyskakujące z mojej aplikacji. Przeprowadziłem szczegółowe badania dotyczące tego zadania. CALL POPOUT to aplikacja, która używa tej samej funkcjonalności, ale nie otrzymuję kodu źródłowego.

Obecnie mam kilka modułów, dzięki którym możemy uzyskać działanie INCOMING CALL.

public class MyPhonestateListner extends PhoneStateListener { 
    Context context; 
    List<String> blockedNumberList = new ArrayList<String>(); 
    BlockDataSource datasourceobj; 

    public MyPhonestateListner(Context context) { 
     super(); 
     this.context = context; 

    } 

    @Override 
    public void onCallStateChanged(int state, String callingNumber) { 
     super.onCallStateChanged(state, callingNumber); 
     callingNumber = callingNumber.replace(" ", ""); 
     switch (state) { 

     case TelephonyManager.CALL_STATE_IDLE: 
      break; 

     case TelephonyManager.CALL_STATE_OFFHOOK: 
      // handle out going call 
      // if(blockedNumberList.contains(callingNumber)) 
      endCallIfBlocked(callingNumber); 
      break; 

     case TelephonyManager.CALL_STATE_RINGING: 
      // handle in coming call 
      new Handler().postDelayed(new Runnable() { 
        public void run() { 
         Intent intentPhoneCall = new Intent("android.intent.action.CALL"); 
           intentPhoneCall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(intentPhoneCall); 
          } 
        }, 10); 
      // if(blockedNumberList.contains(callingNumber)) 
      //endCallIfBlocked(callingNumber); 
      // ActivityManagerNative.getDefault().moveTaskToBack(i); 
      //android.app.ActivityManager.RunningTaskInfo runningtaskinfo = TaskUtil.getPresentTaskInfo(this); 
      break; 

     default: 
      break; 
     } 
    } 


} 


MY reciever 

public class BlockReciever extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     System.out.println("I am reciever"); 
     TelephonyManager telephony = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     MyPhonestateListner listener = new MyPhonestateListner(context); 
     telephony.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 
} 

Z pomocą powyższego kodu, otrzymuję ekranu mapy mojej aplikacji na szczycie CALL ekranie, ale po prostu na kilka mikrosekund, a następnie połączenie przychodzące zostanie ekran na górze. Muszę PRZECHOWYWAĆ EKRAN WEWNĘTRZNY, gdy urządzenie odbiera każde połączenie i wyświetla ekran mojej aplikacji.

Proszę sugerować.

+0

Hey @ Sam-In-TechValens, udało Ci się rozwiązać ten w końcu? – Nikola

Odpowiedz

0

Podczas połączenia przychodzącego wyświetlane będą zarówno aktywność, jak i domyślna aktywność przychodząca. Na wypadek, gdyby Twoja aktywność była wyświetlana jako pierwsza, później przychodząca aktywność pojawi się nad Twoją, to zadania i elementy z powrotem na stosie.

Rozwiązanie: gdy aktywność jest wyświetlana, sprawdź, czy aktywność przychodząca wyświetla się ponad Twoją -> przenieś swoją aktywność na górę ponownie, z wyjątkiem użytkownika, który odrzucił Twoją aktywność.

proszę zobaczyć moją odpowiedź na similar question here

Powiązane problemy