首页 > 解决方案 > 在通话记录中存储带有自定义标签的电话号码,然后使用我的应用程序调用它

问题描述

我有一个应用程序,它使用 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,否则忽略此广播”。

所以,我的问题是 - 我如何将标签存储到呼叫日志中,或者一些自定义信息,然后我可以在我的广播接收器中使用来识别“属于”我的应用程序的呼叫?

谢谢你。

标签: androidlabelcallbroadcastreceiver

解决方案


推荐阅读