Android intent.resolveActivity возвращает значение null в API 30

В нашем приложении реализован платежный шлюз. Мы открываем намерение открыть GPay, PhonePay, Paytm и другие приложения. Пожалуйста, найдите фрагмент кода ниже,

      String url = "upi://pay?pa=fcbizpayg@freecharge&pn=PAYG&mc=7299&tid=AXIFRCO1506202118501b5bu4s903cafgu4&tr=AXIFRCO1506202118501b5bu4s903cafgu4&am=50.00&cu=INR";

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(url);

Intent appChooser = Intent.createChooser(intent, "Pay using");

if (intent.resolveActivity(getPackageManager()) != null) {
     startActivityForResult(appChooser, PAYMENT_REQUEST);
} else {
     Toast.makeText(PaymeroUserDetailsActivity.this, "No UPI app found! Please Install to Proceed!", Toast.LENGTH_LONG).show();
}

Я добавил тег "запросы" в AndroidManifest.xml

      <queries>
    <intent>
        <action android:name="android.intent.action.CHOOSER" />
        <data android:scheme="upi" />
    </intent>
</queries>

Несмотря на то, что приложения UPI установлены на устройстве, мы не получаем приложение UPI не найдено! Пожалуйста, установите, чтобы продолжить!

Пожалуйста, помогите мне в том, что я делаю.

1 ответ

Начиная с Android 11 — появилось новое ограничение на видимость пакетов с помощью диспетчера пакетов. getPackageManager().resolveActivity().

из-за этого возврата как null

Решение :

Запросы должны быть добавлены в ваш манифест.

Пример:

      <queries>
    <!--for WebView -->
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" />
    </intent>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" />
    </intent>

Обратитесь: https://developer.android.com/about/versions/11/privacy/package-visibility

https://developer.android.com/training/package-visibility/use-cases

Другие вопросы по тегам