Android/Java

안드로이드 바로가기 만들기 ShortCut

easy-1 2021. 6. 10. 16:12

<개요>

앱의 각 부분에 빠르게 액세스하도록  하는 것으로

- 정적 바로가기 

- 동적 바로가기

- 고정된 바로가기 로 나뉨

 

여기서는 고정된 바로가기에 대해서 알아보자


<적용 방법>

- Android 8.0 (API 수준 26) 이상에서만 고정된 바로가기를 만들 수 있음.

- 정적 및 동적 바로가기와 달리 고정된 바로가기는 지원되는 런처에 별도의 아이콘으로 표시됨

 

1. isRequestPinShortcutSupported() 를 사용하여 바로가기 고정을 지원하는지 확인

2. requestPinShortcut() 을 호출하여 바로가기를 기기의 런처에 고정.

3. 성공적으로 고정된 후 PendingIntent 객체를 전달

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    Intent intent = new Intent(this, SecondActivity.class);
    intent.setAction(Intent.ACTION_MAIN);
    intent.putExtra("name", "value");

    ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class);

    if (mShortcutManager.isRequestPinShortcutSupported()) {
        // Assumes there's already a shortcut with the ID "my-shortcut".
        // The shortcut must be enabled.
        Bitmap bitmap = null;
        if (bitmap == null) {
            // pinShortcutInfo
            Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.icon_sample, null);
            bitmap = ((BitmapDrawable) drawable).getBitmap();
        }


        // id는 고유값
        ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(this, "id")
                .setShortLabel(shortLabel)
                .setLongLabel(longLabel)
                .setIcon(Icon.createWithBitmap(bitmap))
                .setIntent(oreoIntent)
                .build();

        Intent pinnedShortcutCallbackIntent = mShortcutManager.createShortcutResultIntent(pinShortcutInfo);


        // Configure the intent so that your app's broadcast receiver gets the callback successfully.
        PendingIntent successCallback = PendingIntent.getBroadcast(this, 0,
                pinnedShortcutCallbackIntent, 0);

        Boolean isSuccess = mShortcutManager.requestPinShortcut(pinShortcutInfo,
                successCallback.getIntentSender());

        if (isSuccess) {
//                    Toast.makeText(this, shortLabel + "바로가기가 바탕화면에 생성되었습니다.", Toast.LENGTH_LONG).show();
        }
    }
}