런처에 바로가기 아이콘을 생성하기 위해서 com.android.launcher.action.INSTALL_SHORTCUT 브로드 캐스트를 사용합니다.
그러나 Android O에서는 com.android.launcher.action.INSTALL_SHORTCUT 브로드캐스트는 암시적 브로드캐스트이므로 더 이상 앱에 아무런 영향을 주지 못합니다.
대신, ShortcutManager 클래스에서 requestPinShortcut() 메서드를 사용하여 앱 단축키를 만들어야 합니다.
Pinning shortcuts (고정 단축키)
앱 단축키와 유사한 Pinning shortcuts를 사용하면 앱의 특정 기능을 빠르게 시작할 수 있습니다.
고정 단축키는 별도의 아이콘으로 런처에 표시됩니다.
Note: 지원되는 런처로 단축키를 고정하려고 시도하면 단축키를 고정할 수 있는 권한을 묻는 대화상자가 나타납니다. 만약, 허용하지 않으면 실행을 취소합니다.
단축키 고정하기
1. isRequestPinShortcutSupported() 메서드를 사용하여 디바이스의 런처에서 바로가기 고정 기능을 지원하는지 확인합니다.
2. shortcut가 이미 존재하는지 여부에 따라 두가지 방법 중 하나로 ShortcutInfo 객체를 만듭니다.
3. 만약 shortcut가 이미 존재하는 경우, shortcut ID만 포함된 ShortcutInfo 개체를 만듭니다. 시스템은 자동으로 shortcut와 관련된 다른 모든 정보를 찾아서 고정합니다.
- 새로운 shortcut를 고정하려면, ID, intent, short labal 이 포함된 ShortcutInfo 객체를 만듭니다.
- requestPinShortcut() 메서드를 호출하여 디바이스의 런처에 shortcut 고정합니다.
4. shortcut가 고정된 이후 updateShortcuts() 메서드를 사용하여 내용을 업데이트 할 수 있습니다.
ShortcutManager mShortcutManager =
context.getSystemService(ShortcutManager.class);
if (mShortcutManager.isRequestPinShortcutSupported()) {
// Assumes there's already a shortcut with the ID "my-shortcut".
// The shortcut must be enabled.
ShortcutInfo pinShortcutInfo =
new ShortcutInfo.Builder(context, "my-shortcut").build();
// Create the PendingIntent object only if your app needs to be notified
// that the user allowed the shortcut to be pinned. Note that, if the
// pinning operation fails, your app isn't notified. We assume here that the
// app has implemented a method called createShortcutResultIntent() that
// returns a broadcast intent.
Intent pinnedShortcutCallbackIntent =
mShortcutManager.createShortcutResultIntent(pinShortcutInfo);
// Configure the intent so that your app's broadcast receiver gets
// the callback successfully.
PendingIntent successCallback = PendingIntent.getBroadcast(context, 0,
pinnedShortcutCallbackIntent, 0);
mShortcutManager.requestPinShortcut(pinShortcutInfo,
successCallback.getIntentSender());
}