我有一个使用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,否则就忽略此广播”。
所以,我的问题是-如何将标签存储在呼叫日志中,或如何在我的广播接收器中使用某些自定义信息存储,以标识“属于”我的应用程序的呼叫?
谢谢。