У меня есть приложение, которое использует библиотеку 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
, чтобы перехватить пользователя, вызывающего этот номер, и перенаправить его в мое приложение, а затем инициировать вызов оттуда.
Вот как выглядит Broadcast Receiver в AndroidManifest:
<receiver android:name=".broadcastreceivers.OutgoingCallReceiver" >
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</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 »», а затем, когда пользователь нажимает для вызова этого номер из журнала вызовов телефона, я хочу использовать эту информацию в моем Broadcast Receiver и проверить «если это тип« MyApp », то откройте мой HomeActivity, иначе просто игнорируйте эту трансляцию».
Итак, мой вопрос - как мне сохранить метку в журнале вызовов или какую-то пользовательскую информацию, которую я затем могу использовать в моем Broadcast Receiver для идентификации вызовов, которые «принадлежат» моему приложению?
Спасибо.