java - android 来电时的电话号码不起作用

标签 java android

我有一个 PhoneStateListener,用于在电话通话结束后打开应用程序。它工作正常,但我还需要获取来电号码,并且使用 incomingNumber 字符串不起作用。这是我的代码:

public class PhoneStateManager extends PhoneStateListener{

    public static Boolean usingPhone = false;
    private MainActivity mainactivity;

    public PhoneStateManager(MainActivity main){
        mainactivity = main;
    }

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
            Log.d("DEBUG", "IDLE");
            if(usingPhone){
                Log.d("DEBUG", "number (PSM): " + incomingNumber);
                mainactivity.askQuestion(incomingNumber);
            }
            usingPhone = false;
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            Log.d("DEBUG", "OFFHOOK");
            usingPhone = true;
            break;
        case TelephonyManager.CALL_STATE_RINGING:
            Log.d("DEBUG", "RINGING");
            usingPhone = false;
            break;
        }
    }
}

当有电话调用时,LogCat 语句会打印出以下内容:

enter image description here

以下是我初始化 PhoneStateManger 的方法:

TelephonyManager tManager = (TelephonyManager) 
          getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateManager listener = new PhoneStateManager(this);
tManager.listen(listener, PhoneStateManager.LISTEN_CALL_STATE);

我不明白为什么该数字总是为空。有什么想法吗?

最佳答案

您必须保存振铃或摘机时的来电号码

public class PhoneStateManager extends PhoneStateListener{

public static Boolean usingPhone = false;
private MainActivity mainactivity;
private String mIncomingNumber;

public PhoneStateManager(MainActivity main){
    mainactivity = main;
}

@Override
public void onCallStateChanged(int state, String incomingNumber) {
    switch (state) {
    case TelephonyManager.CALL_STATE_IDLE:
        Log.d("DEBUG", "IDLE");
        if(usingPhone){
            Log.d("DEBUG", "number (PSM): " + mIncomingNumber);
            mainactivity.askQuestion(mIncomingNumber);
        }
        usingPhone = false;
        break;
    case TelephonyManager.CALL_STATE_OFFHOOK:
        Log.d("DEBUG", "OFFHOOK");
        usingPhone = true;
        break;
    case TelephonyManager.CALL_STATE_RINGING:
        Log.d("DEBUG", "RINGING");
        mIncomingNumber = incomingNumber;
        usingPhone = false;
        break;
    }
}

}

关于java - android 来电时的电话号码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22432178/

相关文章:

java - 使用 Spring Data JPA 通过 @OneToMany 关系属性对实体进行排序

java - 如何从 Lucene 索引中排除数字?

android - 使用maven发布找不到传递依赖

android - 我什么时候应该在使用 avd 的虚拟设备中使用主机 gpu 和快照?

android - Firebase 动态链接和 android 导航架构组件

android - 从图库中选择图像并保存以备将来使用

java - 从 Eclipse 中的文件运行程序

java - Surface View with Camera 在 Android API 23 (android 6+) 上无法运行

java - 如何使用 Spring RestTemplate 禁用 SSL 证书检查?

android - 是否有任何 CustomView 可以让您选择任何颜色