java - 捕获来电号码

标签 java android android-studio

更新 1:

我找到问题了!安装应用程序时,未请求用户许可。我手动完成了并且有效。 新问题,如何让应用在启动时请求权限?

原文

我正在 try catch 来电号码,但无济于事!

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

在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();
        }
    }
}

我错过了什么,没有在 toast 中显示数字?

最佳答案

这个问题困扰了我一个星期,看了你的文章后,我解决了这个问题,非常感谢。 它将这一行添加到主要 Activity 中:

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

关于java - 捕获来电号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59755610/

相关文章:

java - (Android) 更改语言无法正常工作

java - 数组的索引可以在 Java 中为负数吗?

java - 在同一个包中找不到类

java - 一个 Glassfish3 实例发生异常,但另一个实例没有发生 : "java.lang.String cannot be converted to org.slf4j.Marker"

android - 在 jetpack compose 中交替使用 View.INVISIBLE

java - 跨多个 Activity 重用功能

java - 如何以编程方式打开 Telegram 或 Viber?

android - onReceive 异步操作和垃圾回收

java - 将 "Native Advanced Ads"放入弹出窗口关闭

为属性 'signingConfig.storeFile' 指定的 Android 不存在