パッケージの可視化により、Android 11 でアプリを照会および対話

Avatar

James

October 15th, 2020

開発者がアプリ体験に統合できるいくつかの興味深いアップデートが導入された Android 11。 新機能に加えて、Android 11 にアップグレードして再ターゲットする際に、開発者がアプリケーションに統合する必要がある、プライバシーに関する強化事項もいくつかあります。 それらの強化点の 1 つは、ユーザーのデバイス上にインストールされたアプリケーションとパッケージを照会する機能を変更するパッケージの可視性の導入です。

メール アプリケーション用のアプリケーション アイコンとデバイス上のインテントを照会するコード

ブラウザを開くかメールを送信したい場合、アプリケーションはIntentを介してデバイス上の別のアプリケーションを起動して対話する必要があります。 StartActivity を呼び出す前に、QueryIntentActivities または ResolveActivity を実行して、要求を処理できるアプリケーションがあることを確認するのがベスト プラクティスです。 Xamarin.Essentials を使用している場合、ブラウザ (外部)、電子メール、および SMS ではライブラリがすべてのロジックを自動的に処理するため、これらの API を見たことがないかもしれません。

以前の Android 11 では、すべてのアプリはインストールされているすべてのアプリケーションに簡単に照会でき、StartActivity が呼ばれると特定の Intent が開かれるかどうか確認することができました。 しかし、Android 11 では、パッケージの可視性が導入されたため、すべてが変わりました。 5489>

Android 11 をターゲットとする Android プロジェクトの設定

一度 Android 11 にターゲット変更し、Android 11 を実行しているデバイスでアプリケーションを実行すると、QueryIntentActivities を使用した場合は結果がゼロになります。 Xamarin.Essentials を使用している場合、アクティビティを照会する必要がある API のいずれかを呼び出そうとすると、FeatureNotSupportedException が表示されます。 Xamarin.EssentialsのEmail機能を使っているとします。 あなたのコードは次のようになります:

public async Task SendEmail(string subject, string body, List<string> recipients){ try { var message = new EmailMessage { Subject = subject, Body = body, To = recipients }; await Email.ComposeAsync(message); } catch (FeatureNotSupportedException fbsEx) { // Email is not supported on this device } catch (Exception ex) { // Some other exception occurred }}

あなたのアプリがAndroid 10以前をターゲットにしている場合、それはちょうど動作します。 Android 11 のパッケージの可視性では、電子メールを送信しようとすると、Xamarin.Essentials は電子メールをサポートするパッケージを照会して、結果が 0 であることを返そうとします。 この結果、FeatureNotSupportedExceptionがスローされ、理想的ではありません。 アプリケーションがパッケージに可視性を得るには、AndroidManifest.xmlqueries のリストを追加する必要があります。

<manifest package="com.mycompany.myapp"> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries></manifest>

複数のインテントを照会したり複数の API を使用する必要がある場合は、それらをすべてリストに追加する必要があります。

<queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http"/> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="https"/> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="smsto"/> </intent></queries>

以上、わずかな設定を行うだけで、Android 11 をターゲットにしたときに、アプリは完璧に動作し続けます。

Learn More

パッケージの可視性に関する Android 11 公式ドキュメントと、もちろん新しく更新された Xamarin.Essentials のドキュメントを必ず参照してください。 最後に、Xamarin.Android 11 のリリース ノートをお読みください。

Avatar
James Montemagno

Principal Lead Program Manager, .NET Community

フォロー

コメントする