Android: использование ACTION_PICK_ACTIVITY с AppWidget, чтобы определить, какое приложение открыть при печати - PullRequest
1 голос
/ 11 марта 2012

Я пытаюсь разрешить пользователю выбирать, какое приложение открывать, когда они нажимают на мой виджет.Кажется, что способ сделать это - использовать ACTION_PICK_ACTIVITY и каким-то образом сохранить выбранное значение.

http://www.openintents.org/en/node/263 кажется полезным, но не показывает, как извлечь данные из Intent ввозможность сохранить его для будущего создания намерения.

Как я могу легко позволить пользователю выбирать из списка приложений, установленных на его или ее телефоне, а затем сохранять выбранный пакет / класс для создания будущего намерения?

View.OnClickListener activity_picker_listener = new View.OnClickListener(){
    @Override
    public void onClick(View v){
        // Pick an application
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
        pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent);
        startActivityForResult(pickIntent, 0);
    }
};

// The result is obtained in onActivityResult:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (data != null) {
       // save the application that we just picked
   }
}

1 Ответ

1 голос
/ 11 марта 2012

Вы можете сохранить имя пакета выбранного приложения в вашем приложении (sdCard, кеш и т. Д.).Затем, когда пользователь нажимает на ваш виджет и вызывает прослушиватель щелчков, вы делаете это:

PackageManager packageManager = this.getPackageManager();
Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(launchIntent);

ОБНОВЛЕНИЕ:

Это приведет к установке всех установленных приложенийтелефон пользователя:

Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> applications = getPackageManager().queryIntentActivities(intent, 0);

Класс ResolveInfo содержит много полезной информации о приложении, включая имя его пакета.Как только пользователь выбирает приложение, вы получаете имя пакета из его объекта ResolveInfo и используете другой код для открытия программы.

...