java - 捕获来电号码
问题描述
更新 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();
}
}
}
我错过了什么没有在吐司中显示数字?
解决方案
我已经为这个问题奋斗了一个星期,在阅读了您的文章后,我解决了这个问题,非常感谢。它将这一行添加到主要活动中:
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_CALL_LOG}, 1);
推荐阅读
- ios - 如何使用 Swift 为横向模式创建当前底部视图的正确位置?
- json - Dart HTTP POST 与 Map
作为身体 - node.js - 这个快速应用程序中的回调来自哪里?
- google-bigquery - 根据先前的查询从表中选择列
- wordpress - 重置帐户后,woocommerce 在同一页面中重定向
- c - 从输入文件中读取并将单词存储到数组中
- java - 如何解决在 Android Studio 2.2 上使用记录为 @since 1.8+ 错误的 API 的问题?
- kotlin - org.gradle.api.GradleException:编译错误
- node.js - Express JS - 正则表达式 - 除了
- r - 在R中从向量移动到矩阵