IT Share you

Android는 홈 화면에 바로 가기를 만듭니다.

shareyou 2020. 12. 13. 11:25
반응형

Android는 홈 화면에 바로 가기를 만듭니다.


내가하고 싶은 것은 :

1) 활동 안에 2 개의 버튼이 있습니다. 첫 번째를 클릭하면 홈 화면에 바로 가기가 생성됩니다. 바로 가기 html는 이전에 다운로드 페이지를 므로 기본 브라우저를 사용하고 싶지만 이미 페이지가 있으므로 인터넷을 사용하고 싶지 않습니다.

2) 두 번째 버튼은 활동을 시작하는 또 다른 바로 가기를 만듭니다. 그리고 활동에 몇 가지 추가 인수를 전달하고 싶습니다 (예 : 문자열) ...........

그게 가능한가요? 몇 가지 링크와 Android 와 같은 유사한 질문을 찾았 습니다. 홈 화면에 웹 바로 가기를 만드는 프로그래밍 방법이 있습니까?

그들은 내 질문에 대한 답인 것 같지만 누군가이 코드가 모든 장치에서 작동하지 않으며 사용되지 않으며 내가 원하는 작업이 불가능하다고 말했습니다 .......

이 기술은 권장되지 않습니다. 이는 Android SDK의 일부가 아닌 내부 구현입니다. 모든 홈 화면 구현에서는 작동하지 않습니다. 모든 이전 버전의 Android에서 작동하지 않을 수 있습니다. Google은 문서화되지 않은 내부 인터페이스를 유지할 의무가 없기 때문에 향후 Android 버전에서는 작동하지 않을 수 있습니다. 이것을 사용하지 마십시오

내부 구현이란 무엇입니까? 그 코드를 신뢰할 수 있는지 아닌지 ..... 도와주세요 pls .....


예제 코드는 문서화되지 않은 인터페이스 (권한 및 의도)를 사용하여 바로 가기를 설치합니다. "누군가"가 말했듯이 모든 휴대 전화에서 작동하지 않을 수 있으며 향후 Android 릴리스에서 중단 될 수 있습니다. 하지마.

올바른 방법은 매니페스트에서 다음과 같은 인 텐트 필터를 사용하여 홈 화면에서 바로 가기 요청을 수신하는 것입니다.

<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>

그런 다음 인 텐트를 수신하는 활동에서 바로 가기에 대한 인 텐트를 생성하고이를 활동 결과로 반환합니다.

// 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);

Android 홈 화면에서 바로 가기 아이콘을 만드는 방법을 아래에서 개발했습니다 [내 앱에서 테스트 됨]. 그냥 부르세요.

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);
}

활동 이름, 아이콘 리소스 및 권한을 변경하는 것을 잊지 마십시오.

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

행복한 코딩 !!!

편집하다:

중복 문제의 경우 첫 번째 옵션은 코드에 아래 줄을 추가하는 것입니다. 그렇지 않으면 매번 새로 만듭니다.

addIntent.putExtra("duplicate", false);

두 번째 옵션은 먼저 앱 바로 가기 아이콘을 제거한 다음 첫 번째 옵션이 작동하지 않으면 다시 설치하는 것입니다.


com.android.launcher.action.INSTALL_SHORTCUT 브로드 캐스트는 Android oreo 이후로 더 이상 효과가 없습니다. 링크

모든 Android 버전, 특히 android 8.0 또는 oreo 이상 을 지원하려면 아래 코드를 사용하여 바로 가기를 만듭니다.

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
    }
}

매니페스트 파일에 권한 추가 :

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

위의 솔루션을 약간 개선했습니다. 이제 바로 가기가 이미 추가되었는지 여부를 기본 설정에 저장하고 사용자가이를 삭제 한 경우 앱의 새 실행에 추가하지 않습니다. 또한 기존 바로 가기를 추가하는 코드가 더 이상 실행되지 않기 때문에 약간의 시간이 절약됩니다.

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();
}

Android O부터 바로 가기를 만드는 방법은 다음과 같습니다.

            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);
            }

슬프게도 많은 한계가 있습니다.

  1. 사용자가 추가를 수락해야합니다.
  2. 백그라운드에서 추가 / 제거 할 수 없습니다.
  3. 당신은 그것을 업데이트 할 수 있어야하지만 나에게는 작동하지 않았다.
  4. 대상 앱이 제거되면 제거되지 않습니다. 만든 사람 만.
  5. Can't create the icon based on a resource of the targeted app, except if it's of the current app. You can do it from a bitmap though.

For pre-Android O, you can use ShortcutManagerCompat to create new shortcuts too, without any of those limitations.


Since API level 26, using com.android.launcher.action.INSTALL_SHORTCUT is deprecated. The new way of creating shortcuts are using ShortcutManager.

It mentions that there are 3 kinds of shortcuts, static, dynamic and pinned. Based on your requirements, you can choose to create them.


@Siddiq Abu Bakkar Answer works. But in order to prevent creating shortcut every time app launches use shared Preferences.

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
    }
}

I've used it, but some devices on the home screen adds 2 icons. I did not understand??

참고URL : https://stackoverflow.com/questions/6337431/android-create-shortcuts-on-the-home-screen

반응형