Набрать несколько номеров программно в Android? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь разработать функцию для приложения, где я могу автоматически вызывать несколько номеров по одному. Одним нажатием кнопки будет сгенерирован вызов на номер. Если вызов посещен, то прервите процесс там.

Если набранный номер не может подключиться к вызову (по любой причине, например:

Набранный номер занят. Набранный номер выключен. Набранный номер находится вне зоны обслуживания .... et c). Тогда как я могу автоматически перенаправить вызов на другой номер, проверив состояние вызова ..?

Можно ли автоматически вызывать несколько номеров один за другим, проверив состояние исходящего вызова .., Как

Ответы [ 3 ]

0 голосов
/ 28 апреля 2020

попробуйте сделать, пока l oop для просмотра массива чисел

while (i<=N)
{.....}

, это более эффективно, чем go на массиве Java

0 голосов
/ 09 мая 2020

Проблема решена с использованием широковещательного приемника и

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

}
0 голосов
/ 28 апреля 2020

хранит все ваши числа в массиве и просматривает этот последний, если у вас есть N чисел, код java будет

for (i=0,i<N,i++)
{test=this.call(A[i]);
  if test==0 i=i+1;
     else i=N;
} 

A - это массив, который содержит числа и (вызов int) функция, которая вызывает номер и возвращает 0, если вызов не удался, и 1, если вызов подключен, я беру случай, когда только один номер успешен для подключения void stop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...