5

動的機能とインスタント アプリを試しています。さまざまな機能間を移動するには、ディープ リンクを使用します。

別のアクティビティに移動するたびに、曖昧さ回避ダイアログが 1 秒未満表示され、1 つのアプリがリストされます。"Once" と "Always" (オランダ語) のオプションがグレー表示されていることに注目してください。

サンプル Github プロジェクト

Github の現在の構造に一致する最小限のサンプルを作成しました。Android Studio 3.5 - RC2 が必要です

簡潔に表示された明確化ダイアログ

いくつかのコンテキスト:

ディープリンクは正しく設定されていると確信しています。とにかくそれを確認したいので、設定は次のとおりです。

1 - マニフェスト:

<activity
            android:name=".ProfileActivity">

        <intent-filter
                android:autoVerify="true"
                android:priority="100">

            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                    android:host="giddy.entreco.nl"
                    android:pathPrefix="/profile"
                    android:scheme="http" />
            <data android:scheme="https" />

        </intent-filter>

    </activity>

2 - Assetlinks 私のドメインには、公的にアクセス可能なassetlinks.jsonが含まれています

3 - 社は正しい 私が使用している社は正しい

Executing tasks: [signingReport] in project

SHA1: 3A:52:19:77:C1:AD:18:F4:98:21:77:74:37:DC:9B:89:02:64:6E:C6
SHA-256: 25:DD:C3:7B:8E:35:D3:39:D5:D4:6C:B5:EA:7D:14:AF:82:EC:9C:56:A6:F5:76:A3:E1:D7:69:B3:EC:58:72:E8
Valid until: Saturday, March 21, 2048

4 -確認 済みのデジタル アセット リンクファイル

5 - URL インテントの テスト 唯一の問題は、明確化ダイアログが短時間表示されることです。

追加情報

  • apply plugin: 'com.android.dynamic-feature'はすべてのモジュールで使用しています(appコース外を除く)

  • アンドロイドスタジオ: 3.5 RC2; Android-gradle-plugin: 3.5.0-rc02

  • 私のデバイスは OnePlus6 です - Oxygen 9.0.7 と Android 9 を搭載しています

  • Googleの公式サンプル、私のデバイスでこの動作を示しています

  • 一部の Samsung デバイスでは、動作が異なります。Disambiguation with 1 オプションを表示する代わりに、アプリを 2 回リストし、選択するOnceか「常に」を選択するまで待機し続けます。(注、これは Play ストアのリリース前レポートから入手しました) ここに画像の説明を入力

  • APK、App Bundle、または Google Play からのダウンロードのいずれをビルドしても、この動作が見られます。いつも同じです。

その煩わしいダイアログを邪魔にならないようにするための提案はありますか? apk/bundle を分析する、特定のActivity. に一度だけでbase module's manifestなく、profile module's manifest。モジュールのインストール中に Android/PlayStore がこれらのマニフェストをマージする方法についてはほとんど理解していませんが、この場合、ダイアログを表示することは理にかなっていると思います。

4

2 に答える 2

1

リフレクションに切り替える代わりに、動的機能で URI インテントを使用する解決策が考えられます。実行時に packageManager.queryIntentActivities() を使用して必要なクラス名を取得できるトリックを使用できるため、ハードコーディングされたアクティビティ名を使用する必要はありません。

次の拡張関数は、URI またはディープ リンクを使用してインテントを選択ダイアログを表示しないものに変換する方法の例です。

fun Intent.convertToSafeDynamicFeatureModuleIntent(context: Context) {
    //Get list of all intent handlers for this Intent. This should only be the actual activity we are looking for
    val options = context.packageManager.queryIntentActivities(this, PackageManager.MATCH_DEFAULT_ONLY)
    //Set the activity that supported the given intent
    setClassName(packageName, options[0].activityInfo.name)
}

次に、次のように簡単に実行できます。

intent.convertToSafeDynamicFeatureModuleIntent(context)
startActivity(intent)

より長い説明はここにあります

于 2021-01-03T20:09:14.113 に答える