2014-12-20 2 views
0

Я хочу, чтобы начать деятельность на входящем вызове мой код выглядит так:запуск активности при входящем вызове-андроида

package com.suraj.test; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.content.BroadcastReceiver; 
import android.util.Log; 
import android.widget.Toast; 

public class IncomingCallReciever extends BroadcastReceiver { 

    private Context myContext; 
    private Intent myIntent; 

    public void onReceive(Context context, Intent intent) { 
     myIntent = new Intent(context, CallerId.class); 
     myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     myIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

     myContext = context; 
     TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     int events = PhoneStateListener.LISTEN_CALL_STATE; 
     tm.listen(phoneStateListener, events); 
    } 

    private final PhoneStateListener phoneStateListener = new PhoneStateListener() { 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 

      switch (state) { 
       case TelephonyManager.CALL_STATE_IDLE:  
        break; 

       case TelephonyManager.CALL_STATE_RINGING: 
        Thread thread = new Thread() { 
         private int sleepTime = 400; 

         @Override 
         public void run() { 
          super.run(); 
          try { 
           int wait_Time = 0; 

           while (wait_Time < sleepTime) { 
           sleep(400); 
            wait_Time += 100; 
           } 
          } catch (Exception e) { 
          } finally { 
          } 
          IncomingCallReciever.this.myContext.startActivity(IncomingCallReciever.this.myIntent); 

         } 
        }; 
        thread.setPriority(Thread.MAX_PRIORITY); 
        thread.run(); 
      } 

      switch (state) { 
       case TelephonyManager.CALL_STATE_IDLE: 
        try { 
         CallerId.fa.finish(); 

        } catch (NullPointerException e) { 
        } 

        break; 
      } 

      super. 
        onCallStateChanged(state, incomingNumber); 
     } 
    }; 
} 

проблема заключается в том, что активность проявляется после того, как спустя 1 или 2 секунды после того, как на экране вызывающего абонента на дисплее. Я хочу запустить его сразу же после экрана звонящего. что я могу сделать

+2

Почему спать тогда? – SMA

+0

, потому что иногда начинается первая активность, а затем появляется экран вызова. – Suraj

+0

Попробуйте использовать Barrier, чтобы при завершении действия выполнялась только ваша нить. Сон не всегда лучший вариант. – SMA

ответ

0

Попробуйте удалить этот блок

try { 
    int wait_Time = 0; 
    while (wait_Time < sleepTime) { 
     sleep(400); 
     wait_Time += 100; 
    } 
} catch (Exception e) { 
} finally {} 
Смежные вопросы