Как связать CallScreeningService? - PullRequest
0 голосов
/ 11 июля 2019

Я хочу получить информацию о звонке и заблокировать звонки (при необходимости).Поскольку метод endCall TelecomManager устарел и в соответствии с документацией, он предлагает использовать CallScreeningService.https://developer.android.com/reference/android/telecom/CallScreeningService.html

Как уже упоминалось в документации Android, я пытаюсь связать CallScreeningService с моим приложением.

Я создал класс

    public class CallUtil extends CallScreeningService {
      private Call.Details mDetails;
      private static CallScreeningUtil sCallScreeningUtil;

      @Override
      public void onScreenCall(Call.Details callDetails) {
        CallResponse.Builder response = new CallResponse.Builder();
        Log.e("CallBouncer", "Call screening service triggered");

        sCallScreeningUtil = this;
        mDetails = callDetails;
        respondToCall(callDetails, response.build() );
    }
}

ЭтоСистемное приложение и я добавили необходимые разрешения в AndroidManifest.xml, такие как CALL_PHONE, MODIFY_PHONE_STATE, CALL_PHONE, ANSWER_PHONE_CALLS.

Я также добавил подробности службы, как показано ниже,

 <service android:name=".CallUtil"
          android:permission="android.permission.BIND_SCREENING_SERVICE">
      <intent-filter>
          <action android:name="android.telecom.CallScreeningService"/>
      </intent-filter>
 </service>

Я являюсьвроде как потерялось, как связать этот сервис с моей деятельностью или как связать этот сервис с моим приложением, которое будет вызывать переопределенные методы в CallUtil.

1 Ответ

1 голос
/ 12 июля 2019

На основе предоставленной здесь документации https://android.googlesource.com/platform/frameworks/base/+/9e1d4f86ba43e87264aba178f2bb037a3c3b26fb/telecomm/java/android/telecom/CallScreeningService.java

    Intent mCallServiceIntent = new Intent(this,"android.telecom.CallScreeningService");
        ServiceConnection mServiceConnection = new ServiceConnection(){

            @Override
            public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                // iBinder is an instance of CallScreeningService.CallScreenBinder
                // CallScreenBinder is an inner class present inside CallScreenService
            }

            @Override
            public void onServiceDisconnected(ComponentName componentName) {

            }

            @Override
            public void onBindingDied(ComponentName name) {

            }
        }

А из действия, чтобы привязать к услуге, которую вы можете использовать

bindService(mCallServiceIntent, mServiceConnection, Context.BIND_AUTO_CREATE)
...