Проблема решена с использованием широковещательного приемника и
package bp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.provider.ContactsContract.PhoneLookup;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import model.NumberModel;
public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
private final String TAG = getClass().getSimpleName() + "Atiar - ";
public boolean prevState = false, currentState = false;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {
// Outgoing call
final String outgoingCallNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.i(TAG, outgoingCallNumber);
}
else {
// Incoming call
String incomingCallNumber = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.i(TAG, incomingCallNumber+"");
}
try {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
Toast.makeText(context, "Ringing State", Toast.LENGTH_SHORT).show();
//BP.savePreviousState(false);
}
if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
Toast.makeText(context, "Received State", Toast.LENGTH_SHORT).show();
BP.savePreviousState(true);
}
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
currentState=true;
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 100ms
Log.e(TAG, "Ideal state");
Toast.makeText(context, "Idle State", Toast.LENGTH_SHORT).show();
Log.e(TAG,"curr = " + currentState + " prev = "+BP.getPreviousState()+ " size ="+ BP.queue.size());
if (BP.getPreviousState() && currentState && BP.queue.size()>0){
BP.callNumberFromNumberDialActivity();
}
}
}, 3000);
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
другого класса с методом stati c, а также очередью и обработчиком для пакета с задержкой по времени bp;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.Locale;
import java.util.Queue;
import info.atiar.prnappdialer.NumberDialActivity;
public class BP {
private static final String PREFS_NAME = "pref";
public static Activity numberDialActivity;
public static Queue<String> queue = new LinkedList<>();
public static String getCurrentDateTime(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());
return currentDateandTime;
}
public static void openDialPad(Activity activity, String phoneNumber) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + phoneNumber));
activity.startActivity(intent);
}
public static void callNumber(Activity activity, String phoneNumber) {
numberDialActivity = activity;
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + phoneNumber));
activity.startActivity(intent);
}
public static void callNumberFromNumberDialActivity() {
callNumber(numberDialActivity,queue.remove());
}
public static void savePreviousState(Boolean previousState){
setPreference("prev",previousState);
}
public static boolean getPreviousState(){
return getPreference("prev");
}
//SharedPreferences
private static boolean setPreference(String key, boolean value) {
SharedPreferences settings = MyApplication.getContext().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(key, value);
return editor.commit();
}
private static boolean getPreference(String key) {
SharedPreferences settings = MyApplication.getContext().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
return settings.getBoolean(key, false);
}
private static void removeSingleItem(String keyToRemove) {
SharedPreferences settings = MyApplication.getContext().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
settings.edit().remove(keyToRemove).commit();
}
private static void removeAllItem() {
SharedPreferences settings = MyApplication.getContext().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
settings.edit().clear().commit();
}
}