Android在主屏幕上创build快捷方式

我想要做的是:

1)我在一个活动里面,有2个button。 如果我点击第一个在我的主屏幕上创build一个快捷方式。 快捷方式打开之前已经下载的html页面,所以我希望它使用默认的浏览器,但我不想使用互联网因为我已经有了页面。

2)第二个button创build另一个启动活动的快捷方式。 我想传递给一些额外的参数(例如string)………..

这些事情可能吗? 我发现了一些链接和一些类似的问题,如Android:有没有一种编程方式,在主屏幕上创build一个Web快捷方式

他们似乎是我的问题的答案,但有人告诉我,这个代码是不会在所有设备上工作,这是不赞成,我想要做的是不可能的…….

这种技术是不推荐的。 这是一个内部实现,而不是Android SDK的一部分。 它不适用于所有的主屏幕实现。 它可能不适用于所有以前的Android版本。 它可能无法在未来的Android版本中使用,因为Google没有义务维护内部未logging的接口。 请不要使用这个

什么是内部实现? 该代码是否值得信赖…..帮助我请…..

示例代码使用未logging的接口(权限和意图)来安装快捷方式。 正如“某人”告诉你的,这可能不适用于所有手机,并可能在未来的Android版本中打破。 不要这样做。

正确的方法是从主屏幕上听取快捷方式请求 – 在您的清单中使用意向filter:

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

然后在接收意图的活动中,为您的快捷方式创build一个意图,并将其作为活动结果返回。

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

我已经开发了一种方法来创buildandroid主屏幕上的快捷方式图标[testing我自己的应用程序]。 只要打电话吧

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

快乐编码!

编辑:

对于重复问题,第一个选项是在代码中添加下面一行,否则每次都会创build一个新的。

 addIntent.putExtra("duplicate", false); 

第二个选项是先卸载应用程序快捷方式图标,然后再安装如果第一个选项不起作用。

我改进了上面的一点解决scheme。 现在,它会保存首选项,以确定是否已经添加了快捷方式,如果用户删除了快捷方式,则不会将其添加到新应用程序中。 这也节省了一点时间,因为添加现有快捷方式的代码不再运行。

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

@Siddiq阿布Bakkar答案的作品。 但为了防止每次应用程序启动时使用共享首选项创build快捷方式。

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

由于API level 26 ,使用com.android.launcher.action.INSTALL_SHORTCUT已弃用。 创build快捷方式的新方法是使用ShortcutManager

它提到有3种快捷方式,静态,dynamic和固定。 根据您的要求,您可以select创build它们。