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


Этот код показывает диалоговое окно share по умолчанию

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/html");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Message"));
startActivity(Intent.createChooser(sharingIntent,"Share using"));

диалоговое окно общий доступ

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

2 5

2 ответа:

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

PackageManager pm = getActivity().getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_SEND, null);
mainIntent.setType("text/plain");
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent, 0); // returns all applications which can listen to the SEND Intent
for (ResolveInfo info : resolveInfos) {
    ApplicationInfo applicationInfo = info.activityInfo.applicationInfo;

    //get package name, icon and label from applicationInfo object and display it in your custom layout 

    //App icon = applicationInfo.loadIcon(pm);
    //App name  = applicationInfo.loadLabel(pm).toString();
    //App package name = applicationInfo.packageName;
}

После того, как у вас есть этот набор деталей приложения, вы можете использовать его в адаптере вашего GridView и показать детали.

Итак, вместо обычного всплывающего окна, отображающего приложения в списке, вам нужно пользовательское всплывающее окно, отображающее приложения в виде сетки?

Это можно сделать, создав всплывающее окно с видом сетки самостоятельно. Независимо от того, что это акция. Затем создайте список приложений, которые вы хотели бы показать. Вы можете получить их, используя resolveActivity метод из Intent (или см. ответ Сваяма).
Затем используйте этот список для заполнения представления сетки.