Как позвонить в список номеров по нажатию кнопки - PullRequest
0 голосов
/ 05 июня 2019

Я создаю приложение, которое читает список чисел из текстового файла и отображается в виде списка, я могу этого достичь, но не имею представления о том, как планировать вызовы один за другим

Example.xls

Рассмотрим список чисел в строке файла

00000000000

62728828282

26727737338

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

    public class ScheduledFragment extends Fragment {
String[] strings;
RecyclerView listView;
Button button;

List<PhoneNumber> phoneNumbers;


public ScheduledFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_scheduled, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    listView = view.findViewById(R.id.list);
    button = view.findViewById(R.id.btn);


    FloatingActionButton fab = view.findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                requestPermission();
            } else {


                readExcelFileFromAssets();
                initialiseAdapter();

            }
        }
    });


    final PhoneState phonestate = new PhoneState();
    TelephonyManager telephonyManager = (TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(phonestate,PhoneStateListener.LISTEN_CALL_STATE);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            try {
                InputStream myInput;
                AssetManager assetManager = getActivity().getAssets();
                myInput = assetManager.open("phone.xls");

                Workbook workbook = Workbook.getWorkbook(myInput);
                final Sheet sheet = workbook.getSheet(0);

                final int row = sheet.getRows();
                final int col = sheet.getColumns();


                for (int i = 0; i < col; i++) {

                    for (int j = 0; j < row; j++) {

                        String number = "";
                        Cell cell;
                        cell = sheet.getCell(i,j);
                        number =number + cell.getContents();


 Toast.makeText(getContext(),number+"",Toast.LENGTH_LONG).show();
                        if (!phonestate.isOnCall) {
                            callPhone(number);
                        }


                    }
                }


            } catch (Exception e) {

            }
        }
    });

}

//Methods

private void requestPermission() {
    ActivityCompat.requestPermissions(getActivity(), new String[] 
{Manifest.permission.CALL_PHONE}, 1);
}


private void initialiseAdapter() {
    listView.setHasFixedSize(true);
    listView.setLayoutManager(new LinearLayoutManager(getContext()));
    RecyclerAdapter recyclerAdapter = new RecyclerAdapter(phoneNumbers);
    listView.setAdapter(recyclerAdapter);

}



  public void callPhone(String number) {
   Intent call = new Intent(Intent.ACTION_CALL);
   call.setData(Uri.parse("tel:" + number));
   startActivity(call);
 }

public void readExcelFileFromAssets() {
    phoneNumbers = new ArrayList<>();

    try {
        InputStream myInput;
        AssetManager assetManager = getActivity().getAssets();
        myInput = assetManager.open("phone.xls");

        Workbook workbook = Workbook.getWorkbook(myInput);
        Sheet sheet = workbook.getSheet(0);

        int row = sheet.getRows();
        int col = sheet.getColumns();


        for (int i = 0; i < col; i++) {

            for (int j = 0; j < row; j++) {

                String number = "";
                Cell cell;
                cell = sheet.getCell(i, j);
                number = number + cell.getContents();
                phoneNumbers.add(new PhoneNumber(number));
            }
        }


    } catch (Exception e) {

    }
}

}

class PhoneState extends PhoneStateListener {


boolean isOnCall = true;

@Override
public void onCallStateChanged(int state, String phoneNumber) {
    super.onCallStateChanged(state, phoneNumber);

    if (TelephonyManager.CALL_STATE_IDLE == state) {

            isOnCall = false;
    } else if (TelephonyManager.CALL_STATE_RINGING == state) {
        isOnCall = true;
    } else if (TelephonyManager.CALL_STATE_OFFHOOK == state){
        isOnCall = true;
    }
}
}


class PhoneNumber {
String number;

public PhoneNumber() {

}

public PhoneNumber(String number) {
    this.number = number;
}
}

Результат, который я хочу

Должен автоматически звонить на все номера один за другим после завершения звонка

Результат я получаю

Вызов только одного номера, случайно выбранного из файла

Может кто-нибудь сказать, пожалуйста, как это сделать? Я новичок в этом, любая помощь будет оценена спасибо

1 Ответ

0 голосов
/ 10 июня 2019

Перейдите по этой ссылке здесь

Введите этот код после того, как вы перебрали все числа в файле .xls.

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

    for(int i = 0;i <phoneNumbers.size();i++)
    {
    if (!phonestate.isOnCall)
      {
       callPhone(phoneNumbers.get(i).toString());
      }
    }
}
...