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);
}
슬프게도 많은 한계가 있습니다.
- 사용자가 추가를 수락해야합니다.
- 백그라운드에서 추가 / 제거 할 수 없습니다.
- 당신은 그것을 업데이트 할 수 있어야하지만 나에게는 작동하지 않았다.
- 대상 앱이 제거되면 제거되지 않습니다. 만든 사람 만.
- 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
'IT Share you' 카테고리의 다른 글
다른 SQL Server에 연결하기위한 T-SQL 구문은 무엇입니까? (0) | 2020.12.13 |
---|---|
도구 사용-장치로 누출 (0) | 2020.12.13 |
Gradle 오류 : 지원되는 최소 Gradle 버전은 3.3입니다. (0) | 2020.12.13 |
.NET에서 메모리 누수가없는 이유는 무엇입니까? (0) | 2020.12.13 |
pip install PIL은 virtualenv에 설치되지 않습니다. (0) | 2020.12.13 |