android - 在通话记录中存储带有自定义标签的电话号码,然后使用我的应用程序调用它
问题描述
我有一个应用程序,它使用 Agora 库来促进两方之间的视频聊天。
我想要做的是将呼叫的号码存储在电话的通话记录中,然后,当用户进入通话记录并按下该号码时,该号码将被传递到我的应用程序中并在我的应用程序中用于通话相应的用户。
以下是我当前记录呼叫用户的号码的方式:
@Override
public void onInviteReceived(final String channelName, final String contactPhone, int uid, final String s2) { //call out other remote receiver
Log.i(TAG, "onInviteReceived channelName = " + channelName + " contactPhone = " + contactPhone);
runOnUiThread(new Runnable() {
@SuppressLint("MissingPermission")
@Override
public void run() {
Gson gson = new Gson();
CallExtra callExtra = gson.fromJson(s2, CallExtra.class);
ContentValues values = new ContentValues();
values.put(CallLog.Calls.CACHED_NUMBER_LABEL, "FairyApp");
values.put(CallLog.Calls.CACHED_NAME, "FairyApp");
values.put(CallLog.Calls.TYPE, CallLog.Calls.INCOMING_TYPE);
values.put(CallLog.Calls.DATE, System.currentTimeMillis());
values.put(CallLog.Calls.DURATION, 50);
values.put(CallLog.Calls.NUMBER, contactPhone);
getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
如您所见,我刚刚对信息进行了硬编码,只是为了查看它是否有效,并且确实有效 - 该号码正在记录到电话的通话记录中(显然,我已经处理了执行此操作的权限) .
然后,我创建了一个拦截类型意图的广播接收器,android.intent.action.NEW_OUTGOING_CALL
以拦截呼叫该号码的用户并将他或她重定向到我的应用程序,然后从那里发起呼叫。
以下是广播接收器在 AndroidManifest 中的外观:
<receiver android:name=".broadcastreceivers.OutgoingCallReceiver" >
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
这是 Receiver 当前所做的(目前是硬编码的):
public class OutgoingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if (phoneNumber.equals("4444")){
context.startActivity(new Intent(context, HomeActivity.class));
}
}
}
所以,它基本上拦截了呼叫意图,获取电话号码,如果电话号码是“4444”,那么它进入我的HomeActivity。
这行得通。
我遇到的问题是尝试为存储的号码保存一个“标签” - 我想存储一个“这个号码是“MyApp”类型的信息,然后,当用户按下从电话的通话记录,我想在我的广播接收器中使用该信息并检查“如果这是类型“MyApp”然后打开我的 HomeActivity,否则忽略此广播”。
所以,我的问题是 - 我如何将标签存储到呼叫日志中,或者一些自定义信息,然后我可以在我的广播接收器中使用来识别“属于”我的应用程序的呼叫?
谢谢你。
解决方案
推荐阅读
- php - Wordpress - 如果类别不匹配,则不显示任何帖子
- url - 如何通过 PWA 方式强制在 Android 设备的主屏幕上创建网站快捷方式
- python - 重命名列表中的项目并使用下一个和上一个按钮转到另一个项目,但将重命名的项目保留在列表中
- swift - 查询搜索 Swift
- javascript - 单行内联注释前空格的 ESLint 规则
- swift - 如何在 SideMenu Swift 中添加边框作为分隔符?
- android - PWABuilder - Android 商店包问题
- machine-learning - 与默认模型相比,XGBoost 超调参数的精度较低
- ios - 单行 UILabel - 基线位置错误
- .net-core - AutoMapper:映射到字典时出现“仅对类型的顶级个人成员支持成员的自定义配置”错误