Wie erhalte ich den Standard-App-Auswahldialog, auch wenn die Standard-App bereits ausgewählt ist?

8

Angenommen, ich habe eine Browser-App,

Und ich möchte, dass eine Einstellung als "Standardbrowser" aufgerufen wird, um die Dialogauswahl anzuzeigen, obwohl der aktuelle Standardbrowser nicht meine App ist.

Wie kann ich den App-Auswahldialog programmgesteuert anzeigen lassen?

Danke.

Update Nach der Antwort von Michals Antwort schrieb ich folgendes:

%Vor%

Während der Auswahldialog angezeigt wird, wird die Option "Immer" und "Nur einmal" nicht angezeigt. Wie kann ich diese Option anzeigen lassen?

Danke!

    
nubela 27.04.2014, 10:11
quelle

2 Antworten

14

Es gibt einen schmutzigen raffinierten Hack, der dir erlaubt, das zu tun. Die Inspiration für diesen Hack könnte hier

gefunden werden

Die Idee

bedeutet, dass android denkt, dass ein neuer Browser installiert wurde, der eine gefälschte Komponente mit einem typischen Browser Intent-Filter füttert. Ich werde einen kleinen Testfall als Proof-of-Concept bereitstellen, und es liegt an Ihnen zu entscheiden, wie Sie ihn in Ihrer realen Anwendung verwenden könnten.

Der vorgeschlagene Ansatz

scheint allgemein und in vielen Fällen anwendbar zu sein (nicht nur für Launcher und Browser) und hängt nur vom Intent-Filter ab, der einem Resolver zugeführt wird.

Nehmen wir an, dass wir eine Standardaktivität zum Durchsuchen des einfachen Links Ссылка überschreiben möchten Wir werden neben den echten in AndroidManifest.xml eine falsche Browseraktivität deklarieren:

%Vor%

FakeActivity ist absolut leer:

%Vor%

Wir zeigen die App-Auswahl durch Drücken einer einfachen Schaltfläche in activity_main.xml an und testen das Standardverhalten durch Drücken einer anderen Taste:

%Vor%

Jedes Mal, wenn Sie auf changeDefaultButton klicken, wird der Auswahldialog angezeigt (vorausgesetzt, es sind mindestens zwei geeignete Browser-Apps installiert). Außerdem ermöglicht der Auswahldialog dem Benutzer immer, die ausgewählte Anwendung als Standard festzulegen .

Links:

GitHub-Proof-of-Concept-Projekt

Hoffe, das hilft.

    
Drew 29.04.2014, 20:12
quelle
0

Sie können Intent mit ACTION_CHOOSER erstellen, das mit Intent.createChooser() erhalten wird. In der Methode params werden die Anfangsabsicht und der Titel übergeben. Sie können diesem Chooser mehr Absicht hinzufügen, indem Sie extra Intent.EXTRA_INITIAL_INTENTS mit einem Array von Absichten einfügen.

    
Michal 27.04.2014 10:18
quelle

Tags und Links