首页 > 解决方案 > 捕获来电号码

问题描述

更新 1:

我发现了问题!安装APP时,不要求用户许可。我手动完成了它并且有效。新问题,如何让应用在启动时请求权限?

原文

我正在尝试捕获来电号码,但无济于事!

没有出现错误,这就是问题所在,所以我一定遗漏了一些细节!

在stackoverflow上,有很多主题,但都是很老的,答案不起作用......

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="net.aaa.androidcall">

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.PHONE_STATE" />

    <application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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

    </application>

</manifest>

服务接收器.java

package net.aaaa.androidcall;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.view.Gravity;
import android.widget.Toast;

public class ServiceReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.PHONE_STATE")){
            String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
            String Number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

            Toast toast = Toast.makeText(context, "Number: " +Number+ ", Status: "+ state,Toast.LENGTH_LONG);

            toast.setGravity(Gravity.BOTTOM|Gravity.LEFT,3,0);
            toast.show();
        }
    }
}

我错过了什么没有在吐司中显示数字?

标签: javaandroidandroid-studio

解决方案


我已经为这个问题奋斗了一个星期,在阅读了您的文章后,我解决了这个问题,非常感谢。它将这一行添加到主要活动中:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_CALL_LOG}, 1);


推荐阅读