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