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 секунды после того, как на экране вызывающего абонента на дисплее. Я хочу запустить его сразу же после экрана звонящего. что я могу сделать
Почему спать тогда? – SMA
, потому что иногда начинается первая активность, а затем появляется экран вызова. – Suraj
Попробуйте использовать Barrier, чтобы при завершении действия выполнялась только ваша нить. Сон не всегда лучший вариант. – SMA