Как отобразить диалоговое окно выбора, даже если URI является ссылкой на приложение

#android

#Android

Вопрос:

В ссылке about android.content.Intent.ACTION_CHOOSER говорится:

… все возможные действия всегда будут отображаться, даже если одно из них в настоящее время помечено как предпочтительное действие.

В о ссылках на приложения говорится:

Нет диалога; ваше приложение открывается для обработки ссылок на ваш сайт

Я думаю, что это антиномия.

Например, показывает ли следующий параметр выбора для URI ссылок на приложение диалоговое окно или нет? В моем тесте диалоговые окна не отображаются.

 package com.example.applinkchooser;

import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Uri uri = Uri.parse(<an app links uri>);

        Intent uriIntent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(Intent.createChooser(uriIntent, null));

        finish();
    }
}
  

Тогда мой вопрос заключается в том, как отобразить диалоговое окно выбора, даже если URI является ссылкой на приложение. Должен ли я использовать android.content.pm.PackageManager ?

Ответ №1:

Если SDK установлен на M или более поздней версии, вы должны добавить MATCH_ALL к флагу.

 int appsFlag = PackageManager.MATCH_DEFAULT_ONLY;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    appsFlag = PackageManager.MATCH_ALL;
}

PackageManager pm = getPackageManager();
Intent urlIntent = new Intent(Intent.ACTION_VIEW, uri);
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(urlIntent, appsFlag);
  

Комментарии:

1. Приложения, у которых нет ссылок на приложения, не отображаются, даже если это решение.