Как вызвать 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 пиксель и нажимал ее, но этот костыль надо исправлять. Заранее спасибо.