Frage

Was ich tun möchte ist:

1) Ich bin in einer Aktivität, es gibt 2 Tasten. Wenn ich auf die erste klicke, wird eine Verknüpfung in meinem Startbildschirm erstellt. Die Abkürzung öffnet eine html Seite, die zuvor heruntergeladen wurde. Ich möchte, dass es den Standardbrowser verwendet, aber ich möchte nicht das Internet verwenden, weil ich bereits die Seite habe.

2) Die zweite Taste erstellen eine weitere Verknüpfung, die eine Aktivität startet. Und ich möchte an die Aktivität gehen einige zusätzliche Argumente (zum Beispiel als Saiten) ...........

Sind das möglich? Ich fand einen Link und einige ähnliche Fragen wie Android: Gibt es eine programmierende Möglichkeit, eine Web -Verknüpfung auf dem Startbildschirm zu erstellen?

Sie scheinen die Antwort auf meine Frage zu sein, aber jemand sagte mir, dass dieser Code nicht auf allen Geräten funktionieren wird und das ist veraltet und dass das, was ich tun möchte, nicht möglich ist .......

Diese Technik wird nicht empfohlen. Dies ist eine interne Implementierung, nicht Teil des Android SDK. Es wird nicht auf allen Implementierungen des Startbildschirms funktionieren. Es funktioniert möglicherweise nicht in allen früheren Versionen von Android. Es funktioniert möglicherweise nicht in zukünftigen Versionen von Android, da Google nicht verpflichtet ist, interne undokumentierte Schnittstellen aufrechtzuerhalten. Bitte verwenden Sie dies nicht

Was bedeutet interne Implementierung? Ist dieser Code vertrauenswürdig oder nicht ..... hilf mir pls .....

War es hilfreich?

Lösung

Der Beispielcode verwendet undokumentierte Schnittstellen (Erlaubnis und Absicht), um eine Verknüpfung zu installieren. Wie "jemand" Ihnen sagte, funktioniert dies möglicherweise nicht auf allen Telefonen und kann in zukünftigen Android -Veröffentlichungen brechen. Tu es nicht.

Die richtige Art und Weise, wie man auf eine Abkürzungsanfrage vom Startbildschirm anhört- mit einem Absichtsfilter wie in Ihrem Manifest:

<activity android:name=".ShortCutActivity" android:label="@string/shortcut_label">
  <intent-filter>
    <action android:name="android.intent.action.CREATE_SHORTCUT" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

In der Aktivität, die die Absicht erhält, erstellen Sie dann eine Absicht für Ihre Verknüpfung und geben sie als Aktivitätsergebnis zurück.

// create shortcut if requested
ShortcutIconResource icon =
    Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);

Intent intent = new Intent();

Intent launchIntent = new Intent(this,ActivityToLaunch.class);

intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, someNickname());
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);

setResult(RESULT_OK, intent);

Andere Tipps

Ich habe unten eine Methode entwickelt, um das Verknüpfungssymbol für Android Homescreen zu erstellen [getestet in meiner eigenen App]. Nennen Sie es einfach.

private void ShortcutIcon(){

    Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Test");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(addIntent);
}

Vergessen Sie nicht, Ihren Aktivitätsnamen, Ihre Symbolressource und Ihre Erlaubnis zu ändern.

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

Happy Coding !!!

Bearbeiten:

Für das doppelte Problem besteht die erste Option darin, im Code unterhalb der Zeile hinzuzufügen, da sonst jedes Mal neue erstellt wird.

addIntent.putExtra("duplicate", false);

Die zweite Option besteht darin, zuerst das App -Shortcut -Symbol zu deinstallieren und dann erneut zu installieren, wenn die erste Option nicht funktioniert hat.

Die com.android.launcher.action.install_shortcut -Sendung hat seit Android Oreo keinen Einfluss mehr. VERKNÜPFUNG

Wenn Sie alle Android -Versionen unterstützen möchten, besonders Android 8.0 oder Oreo und neuer, Verwenden Sie den folgenden Code, um Verknüpfungen zu erstellen:

public static void addShortcutToHomeScreen(Context context)
{
    if (ShortcutManagerCompat.isRequestPinShortcutSupported(context))
    {
        ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(context, "#1")
                .setIntent(new Intent(context, YourActivity.class).setAction(Intent.ACTION_MAIN)) // !!! intent's action must be set on oreo
                .setShortLabel("Test")
                .setIcon(IconCompat.createWithResource(context, R.drawable.ic_launcher))
                .build();
        ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null);
    }
    else
    {
        // Shortcut is not supported by your launcher
    }
}

Berechtigung in der Manifestdatei hinzufügen:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>

Ich habe oben ein bisschen eine Lösung verbessert. Jetzt spart es in den Vorlieben, ob eine Abkürzung bereits hinzugefügt wurde, und fügt sie nicht in neuen Starts einer App hinzu, wenn der Benutzer sie gelöscht hat. Dies spart auch ein wenig Zeit, da der Code zum Hinzufügen einer vorhandenen Verknüpfung nicht mehr ausgeführt wird.

final static public String PREFS_NAME = "PREFS_NAME";
final static private String PREF_KEY_SHORTCUT_ADDED = "PREF_KEY_SHORTCUT_ADDED";


// Creates shortcut on Android widget screen
private void createShortcutIcon(){

    // Checking if ShortCut was already added
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    boolean shortCutWasAlreadyAdded = sharedPreferences.getBoolean(PREF_KEY_SHORTCUT_ADDED, false);
    if (shortCutWasAlreadyAdded) return;

    Intent shortcutIntent = new Intent(getApplicationContext(), IntroActivity.class);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "YourAppName");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(addIntent);

    // Remembering that ShortCut was already added
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(PREF_KEY_SHORTCUT_ADDED, true);
    editor.commit();
}

Ab Android O ist dies der Weg, um eine Abkürzung zu erstellen:

            if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
                final ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);

                ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(context, shortcutId)
                        .setIcon(Icon.createWithResource(context, R.mipmap.ic_launcher))
                        .setShortLabel(label)
                        .setIntent(new Intent(context, MainActivity.class).setAction(Intent.ACTION_MAIN))
                        .build();
                shortcutManager.requestPinShortcut(pinShortcutInfo, null);
            }

Es hat leider viele Einschränkungen:

  1. Fordert der Benutzer das Hinzufügen an.
  2. Im Hintergrund nicht hinzugefügt/entfernt werden.
  3. Sie sollen es aktualisieren können, aber für mich hat es nicht funktioniert.
  4. Wird nicht entfernt, wenn die Ziel -App entfernt wird. Nur derjenige, der es geschaffen hat.
  5. Das Symbol kann nicht auf einer Ressource der Ziel -App erstellt werden, außer wenn es sich um die aktuelle App handelt. Sie können es jedoch aus einer Bitmap tun.

Für vor der Android O können Sie ShortcutManagerCompat auch ohne diese Einschränkungen neue Verknüpfungen erstellen.

Seit API level 26, verwenden com.android.launcher.action.INSTALL_SHORTCUT ist veraltet. Die neue Art, Verknüpfungen zu erstellen, wird verwendet ShortcutManager.

Es wird erwähnt, dass es 3 Arten von Abkürzungen gibt, statisch, dynamisch und festgesteckt. Basierend auf Ihren Anforderungen können Sie sie erstellen.

@Siddiq Abu Bakkar Antwort funktioniert. Um jedoch zu verhindern, dass die Verknüpfung jedes Mal erstellt wird, wenn App -Starts gemeinsam genutzte Einstellungen verwendet.

final String PREF_FIRST_START = "AppFirstLaunch";
 SharedPreferences settings = getSharedPreferences(PREF_FIRST_START, 0);
    if(settings.getBoolean("AppFirstLaunch", true)){

        // record the fact that the app has been started at least once
        settings.edit().putBoolean("AppFirstLaunch", false).commit();
        ShortcutIcon();

    }
final Intent shortcutIntent = new Intent(this, SomeActivity.class);

final Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
// Sets the custom shortcut's title
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
// Set the custom shortcut icon
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.icon));
// add the shortcut
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(intent);
public static void addShortcutToHomeScreen(Context context)
{
    if (ShortcutManagerCompat.isRequestPinShortcutSupported(context))
    {
        ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(context, "#1")
                .setIntent(new Intent(context, YourActivity.class).setAction(Intent.ACTION_MAIN)) // !!! intent's action must be set on oreo
                .setShortLabel("Test")
                .setIcon(IconCompat.createWithResource(context, R.drawable.ic_launcher))
                .build();
        ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null);
    }
    else
    {
        // Shortcut is not supported by your launcher
    }
}

Ich habe es verwendet, aber einige Geräte auf dem Startbildschirm fügt 2 Symbole hinzu. Ich habe es nicht verstanden??

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top