Как вызвать public метод в MainActivity из прослушивателя входящих звонков?

Необходимо получить имя позвонившего абонента. Для этого есть прослушиватель статуса телефона и метод, получающий имя абонента из телефонной книжки. Как вызвать этот метод из прослушивателя?

прослушиватель:

    package com.example.SmartGlasS;

   import android.content.BroadcastReceiver;
   import android.content.Context;
   import android.content.Intent;
   import android.telephony.TelephonyManager;
   import android.util.Log;
 
   public class InterceptCall extends BroadcastReceiver {
    private static boolean incomingCall = false;
    private static final String TAG = "My info";

    String phoneNumber;

    @Override
    public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("android.intent.action.PHONE_STATE")) {
        String phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        if (phoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            //Трубка не поднята, телефон звонит
            phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
            incomingCall = true;
            if (phoneNumber != null && MainActivity.isConnected) {
                Log.i(TAG, "Show window: " + phoneNumber);
                //String name = MainActivity.getContactDisplayNameByNumber(phoneNumber);//Вот здесь компилятор ругается
                MainActivity.CallButt.setText(phoneNumber);//програмное нажатие на кнопку для вызова метода
                MainActivity.CallButt.performClick();
            }
        } else if (phoneState.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {

            if (incomingCall) {
                incomingCall = false;
                if (MainActivity.isConnected) {
                    Log.i(TAG, "Close window.");
                    MainActivity.ESP32.onHome();
                }
            }
        } else if (phoneState.equals(TelephonyManager.EXTRA_STATE_IDLE)) {

            if (incomingCall) {
                incomingCall = false;
                if (MainActivity.isConnected) {
                    Log.i(TAG, "Close window.");
                    MainActivity.ESP32.onHome();
                }
            }
        }
      }
    }
  };

метод:

public  String getContactDisplayNameByNumber(String number) {
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, 
   Uri.encode(number));
    String name = "?";

    ContentResolver contentResolver = getContentResolver();

    try (Cursor contactLookup = contentResolver.query(uri, new String[]{BaseColumns._ID,
            ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null)) {
        if (contactLookup != null && contactLookup.getCount() > 0) {
            contactLookup.moveToNext();
       name = 
       contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
       }
    }

    return name;
}

При прямом вызове любого public метода выдает ошибку, а делать метод static не получается из-за getContentResolver();. Для решения проблемы временно сделал кнопку 1 на 1 пиксель и нажимал ее, но этот костыль надо исправлять. Заранее спасибо.


Ответы (0 шт):