Android应用开发之(如何自动在桌面建立快捷方式)

注意:只能启动主窗体android

通常来讲在 Android 中添加快捷方式的有如下两种:web

 

  • 在launcher的应用程序列表上,长按某一应用程序图标建立快捷方式到桌面app

  • 在桌面上长按在弹出框中选择快捷方式->应用程序->将添加快捷方式的程序this

那么能不能在应用安装时自动将应用的快捷入口添加到桌面呢? 本文给你们分享一下相关的经验?.net

桌面是由launcher来控制的,因此咱们能够经过下面两种方式来实现快捷方式的自动建立:orm

  • 经过向launcher发送Broadcast让launcher建立快捷方式xml

  • 为应用程序的组件注册某一个符合特定条件的IntentFilter,而后能够直接在Launcher的桌面添加启动该组件的快捷方式。get

第一种方式:string

/**it

  * 添加快捷方式到桌面 要点:  

  * 1.给Intent指定action="com.android.launcher.INSTALL_SHORTCUT"

  * 2.给定义为Intent.EXTRA_SHORTCUT_INENT的Intent设置与安装时一致的action(必需要有)  

  * 3.添加权限:com.android.launcher.permission.INSTALL_SHORTCUT

  */

 private void addShortcutToDesktop() {

     Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");

     // 不容许重建

     shortcut.putExtra("duplicate", false);

     // 设置名字

     shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,this.getString(R.string.app_name));

     // 设置图标

     shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(this,

                     R.drawable.ic_launcher));

     // 设置意图和快捷方式关联程序

     shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,new Intent(this, this.getClass()).setAction(Intent.ACTION_MAIN));

     // 发送广播

     sendBroadcast(shortcut);

 }

当快捷方式建立成功后,launcher将经过toast的方式提示快捷方式建立成功,其中经过
shortCutIntent.putExtra("duplicate", false);设置不能重复建立,若是快捷方式已经建立则提示快捷方式已经建立
注意若是要让上述代码能成功运行,咱们还须要设置Uses permission

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

                                          
第二种方式和第一种有些相似,不过咱们不用广播的方式让给launcher建立,而是经过注册IntentFilter,因为“添加快捷方式”Action是 由Launcher经过startActivity-ForResult这一方法发出的,在Activity启动后把初始化的快捷方式 Intent返回给Launcher应用程序,设置结果值为RESULT_OK表示正常返回。
主要代码以下:
首先在xml中设置IntentFilter

<intent-filter>

<action android:name="android.intent.action.CREATE_SHORTCUT" />

</intent-filter>

复制代码建立核心代码:

if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {

        

Intent shortcut = new Intent(Intent.ACTION_CREATE_SHORTCUT);

     // 不容许重建

     shortcut.putExtra("duplicate", false);

     // 设置名字

     shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,

             this.getString(R.string.app_name));

     // 设置图标

     shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,

             Intent.ShortcutIconResource.fromContext(this,

                     R.drawable.ic_launcher));

     // 设置意图和快捷方式关联的程序

     shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,

             new Intent(this, this.getClass()));     

        //将结果返回到launcher

        setResult(RESULT_OK, intent);       

    }

在launcher中咱们运行程序就能够将快捷方式建立在桌面上。
                                       
经过上述方式能够自动将快捷方式建立到桌面上,可是每次运行程序时都会将快捷方式建立到桌面上,下面咱们将经过程序判断快捷方式是否已经建立到桌面上了,基本思路是:因为快捷方式launcher管理的,咱们能够经过查看launcher中是否已经有此快捷方式数据,若是有就不在建立。
主要代码以下:

/**

  * 添加权限:<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>

  *  

  * @return

  */

 private boolean hasInstallShortcut() {

     boolean hasInstall = false;

     final String AUTHORITY = "com.android.launcher.settings";

     Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY

             + "/favorites?notify=true");

     Cursor cursor = this.getContentResolver().query(CONTENT_URI,

             new String[] { "title", "iconResource" }, "title=?",

             new String[] { this.getString(R.string.app_name) }, null);

     if (cursor != null && cursor.getCount() > 0) {

         hasInstall = true;

     }

     return hasInstall;

 }

 

上述查询操做,须要具备如下权限:

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

注意经过程序建立的快捷方式不会随着程序卸载而自动删除。

相关文章
相关标签/搜索