在Android上以编程方式获取来电号码

4

我正在尝试在Android Studio上使用广播接收器获取来电信息。 以下是我尝试过的方法:

<receiver android:name=".receivers.IncomingCalls">
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>

关于这个接收者的意图,我尝试了以下方法:

方法一:

incnumber=intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

方法二:
final String state1 = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        telephony.listen(new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, final String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);
                incnumber=incomingNumber;
            }
        },PhoneStateListener.LISTEN_CALL_STATE);

方法三:

第三种方法:

incnumber=intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

这三种方法都返回空的incnumber。

顺便提一下,我正在Android Pie上运行这个项目,请帮帮我。


除了 Android 9.0(Pie)版本外,它在所有其他版本上都正常工作吗? - Rahul Arora
好的,你已经添加了这个权限吗? <uses-permission android:name="android.permission.READ_PHONE_STATE"/> - Rahul Arora
似乎它只适用于Pie,它可以在Oreo上运行。 - AruN
是的,我已经完成了。 - AruN
extra_incoming_number在Java的API级别21及以上已被弃用。 - DikShU
显示剩余2条评论
1个回答

9
尝试以下方法... 权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

在清单文件中为广播接收器指定其操作,例如将其命名为ServiceReceiver。
<receiver android:name=".ServiceReceiver" >
<intent-filter>
    <action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>

ServiceReceiver.Java

public class ServiceReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, Intent intent) {
    TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
    telephony.listen(new PhoneStateListener(){
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);
            System.out.println("incomingNumber : "+incomingNumber);
        }
    },PhoneStateListener.LISTEN_CALL_STATE);
}

}


我们能否在Android 11上在没有通话记录权限或通知监听器的情况下获取来电号码? - Jamal Ud Din

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接