2016-10-07 2 views
0

사용자가 설치된 경우 다른 응용 프로그램에 대한 홈 화면 바로 가기를 만드는 응용 프로그램을 만들고 있습니다.다른 응용 프로그램의 홈 화면 바로 가기

부분적으로 작동합니다. 23 이하의 API 레벨에서는 완벽하게 작동합니다. 안드로이드 6에서는 바로 가기를 만들지 만 Intent.EXTRA_SHORTCUT_NAMEIntent.EXTRA_SHORTCUT_ICON_RESOURCE을 우회하여 사용하지 않으려는 원본 아이콘과 이름을 남겨 둡니다. 여기

내가 사용하고있는 코드 예제입니다

ApplicationInfo selectedApp; //app that should be used for shortcut 
Intent shortcutIntent = new Intent(getPackageManager().getLaunchIntentForPackage(selectedApp.packageName)); 
shortcutIntent.setAction(Intent.ACTION_MAIN); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "MyNewShortcut"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic1)); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
addIntent.putExtra("duplicate", false); 
getApplicationContext().sendBroadcast(addIntent); 

매니페스트 : 나는 안드로이드 산들에해야한다고 다른 아무것도

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

있습니까?

EDIT

보통, 이것은 다소 복잡하다. 어떻게 든 작동되도록 만들었습니다.
나는이 줄을 추가 할 때 : 나는 새로운 라인처럼 "asd"addIntent 설정, 그리고 그것은 메인 화면에 바로 가기를 생성

shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "asd"); 

하지만 이름을. 거기에 대한 논리 설명이 있습니까?

+0

당신이 더 나은 또한 런타임 권한을 추가 할 수 있습니다 ** M ** –

+0

을 그것은 정상적인 수준의 권한, 위험하지 않습니다, 그래서 doen't 런타임 요청이 필요합니다. Manifest.xml에서 설정하는 것만으로 충분합니다. – filipst

답변

0

M에 대한 몇 가지 종류의 버그가있는 것으로 보입니다.

새로운 아이콘과 이름을 가져 오는 지름길의 경우 첫 번째 의도에도 여분의 이름을 붙여야했습니다. 이름이 두 번째 의도에서 머물러 있기 때문에 빈 문자열이 될 수 있습니다. 지금과 같이 노력하고 있습니다 : 당신이 안드로이드에서 사용하려면

ApplicationInfo selectedApp; //app that should be used for shortcut 

Intent shortcutIntent = new Intent(getPackageManager().getLaunchIntentForPackage(selectedApp.packageName)); 
shortcutIntent.setAction(Intent.ACTION_MAIN); 
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "asd"); //EDIT additional string for first intent that fixes Android M 

addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "MyNewShortcut"); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic1)); 
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
addIntent.putExtra("duplicate", false); 

getApplicationContext().sendBroadcast(addIntent); 
관련 문제