2017-10-10 15 views
5

In the documentation dla nowej funkcji "Przypiętych skrótów" w Androidzie O, wspominają, że "Można również utworzyć specjalistyczne działanie, które pomaga użytkownikom tworzyć skróty, wraz z niestandardowymi opcjami i przyciskiem potwierdzenia" .Skróty z Androidem O Pinned - CREATE_SHORTCUT intent filter

Próbowałem postępować zgodnie z dokumentacją, ale kiedy próbowałem utworzyć nowy skrót, zobaczyłem tylko domyślne okno dialogowe, a nie moją aktywność.

Oto deklaracja w manifeście:

<activity android:name=".ShortcutActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.CREATE_SHORTCUT"/> 
     </intent-filter> 
    </activity> 

P.S
W dokumentacji przedstawia się również przykład w aplikacji Gmail - jak mogę dostać się do tego ekranu? Chciałem zobaczyć przepływ, ale nie mogłem go znaleźć.

+0

czy obejmowały meta- dane –

+0

@OriWasserman sprawdź moją zaktualizowaną odpowiedź –

Odpowiedz

-2

Utwórz nowy plik zasobów: res/xml/shortcuts.xml. W ten sposób można tworzyć skróty, Po wykonaniu tych nessicary zmian w oczywisty

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> 
     <shortcut 
     android:shortcutId="compose" 
     android:enabled="true" 
     android:icon="@drawable/compose_icon" 
     android:shortcutShortLabel="@string/compose_shortcut_short_label1" 
     android:shortcutLongLabel="@string/compose_shortcut_long_label1" 
     android:shortcutDisabledMessage="@string/compose_disabled_message1"> 
     <intent 
      android:action="android.intent.action.VIEW" 
      android:targetPackage="your package" 
      android:targetClass="com.example.myapplication.ComposeActivity" /> 
     </shortcut> 
     <!-- Specify more shortcuts here. --> 
    </shortcuts> 

W oczywistego dodać do znacznika aktywności,

<meta-data android:name="android.app.shortcuts" 
       android:resource="@xml/shortcuts" /> 

Jeśli chcesz dowiedzieć się więcej patrz ten doc Wyjaśnia o przypiętych skrótach, statycznych i dynamicznych skrótach.

Oto example z google, w ich próbki repo

+0

Czy nie jest to tylko w przypadku skrótów statycznych i dynamicznych? Pytam o przypięte skróty.Mój problem polega nie na tworzeniu skrótów, tylko na niestandardowej aktywności, o której wspominają –

0

W Tobie klasa Java wstawić

ShortcutManager sM = c.getSystemService(ShortcutManager.class); 

    Intent intent2 = new Intent(c.getApplicationContext(), ShortcutActivity.class); 
    intent2.setAction(Intent.ACTION_VIEW); 
    ShortcutInfo shortcut2 = new ShortcutInfo.Builder(c,MSG_SHORCUT_CUSTOM) 
      .setIntent(intent2) 
      .setShortLabel("ShortLabel") 
      .setLongLabel("LongLaber") 
      .setDisabledMessage("DisabledMessage") 
      .setIcon(Icon.createWithResource(c, R.mipmap.ic_add_outline_short)) 
      .build(); 
    listshortcut.add(shortcut2); 

    Intent pinnedShortcutCallbackIntent = mShortcutManager.createShortcutResultIntent(shortcut2); 
    PendingIntent successCallback = PendingIntent.getBroadcast(context, 0, pinnedShortcutCallbackIntent, 0); 

mShortcutManager.requestPinShortcut(pinShortcutInfo, successCallback.getIntentSender()); 
    sM.setDynamicShortcuts(listshortcut); 
0

Aby uruchomić swoją aktywność skrótu z działania jako ACTION_CREATE_SHORTCUT, długi kranu na ikonie aplikacji, a następnie naciśnij przycisk ikonę widżetu, zauważysz widżet 1x1, z którego którego chcesz uruchomić żądaną aktywność.

Możesz także jawnie wywołać tę intencję ze swojej aplikacji i wykonać pożądane działanie.

3

Musisz utworzyć nową aktywność jako okno dialogowe, a następnie możesz dodać dowolne opcje w tym oknie dialogowym i obsłużyć jak chcesz metodę addShortcut.

Próbowałem tego kodu, aby dodać i usunąć dynamiczny skrót i zadziałało.

AndroidManifest.xml

<activity android:name=".DialogActivity" 
     android:excludeFromRecents="true" 
     android:theme="@style/Theme.AppCompat.Dialog" 
     > 
... 
</activity> 

DialogActivity.java

public class DialogActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dialog); 
     this.setFinishOnTouchOutside(false); 
     findViewById(R.id.add_button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       addShortcut(); 
      } 
     }); 
     findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 
    } 
    ... 
} 

activity_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_dialog" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.metax.myapplication.DialogActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Do you want to add shortcut?"/> 

    <Button 
     android:id="@+id/cancel_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:layout_alignParentStart="true" 
     android:text="No thanks"/> 
    <Button 
     android:id="@+id/add_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:layout_alignParentEnd="true" 
     android:text="Add me"/> 
</RelativeLayout> 
Powiązane problemy