桌面快捷方式

1,(废弃)判断是否已经创建了快捷方式(在某些机型中需要判断)

 

/**

 * 判断是否已经创建了快捷方式

 *

 * @return

 */

private boolean hasShortcut() {

       boolean isInstallShortcut = false;

       final ContentResolver cr = this.getContentResolver();

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

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

                  + "/favorites?notify=true");

      Cursor c = cr.query(CONTENT_URI,

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

                               "title=?",

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

                               null);

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

            isInstallShortcut = true;

      }

       return isInstallShortcut;

}

 

附:Launcher的数据库

 

 

 

 

 

 

 

2, 创建

Android在桌面上生成快捷方式有两种情况,一种是直接在桌面直接生成;一种是长按桌面,在弹出的快捷菜单中生成。

 

 

 

一、通过广播(Broadcast)的形式向Luncher发送请求生成快捷方式

 

桌面有一个广播接收者,要在桌面上创建快捷方式就需要发送广播:

 

<!--设置wallpapaeractivity -->
<!-- Intent received used to install shortcuts from other applications -->
<receiver
android:name="com.android.launcher2.InstallShortcutReceiver"
android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
<intent-filter>
<action android:name="com.android.launcher.action.INSTALL_SHORTCUT"/>
</intent-filter>
</receiver>

 

*让launcher2帮我们创建快捷方式

 

 

下面就是代码层的实现:

 

/**

 * 为程序创建桌面快捷方式

 */

private void addShortcut() {

 

       // 创建快捷方式的Intent

      Intent shortcutIntent = new Intent(

                   "com.android.launcher.action.INSTALL_SHORTCUT" );

       // 不允许重复创建

      shortcutIntent.putExtra( "duplicate"false );

       // 需要现实的名称

      shortcutIntent.putExtra(Intent. EXTRA_SHORTCUT_NAME,

                  getString(R.string. shortcut_name));

       // 快捷图片

      Parcelable icon = Intent.ShortcutIconResource. fromContext(

                  getApplicationContext(), R.drawable. unlock);

      shortcutIntent.putExtra(Intent. EXTRA_SHORTCUT_ICON_RESOURCE, icon);

       // 设置桌面点击的快捷入口意象

      Intent homeIntent = new Intent();

      homeIntent.setAction( "com.it360.mobilesafe.LOCKONEKEY" );//必须使用隐式意象

      homeIntent.addCategory(Intent. CATEGORY_DEFAULT);

      shortcutIntent.putExtra(Intent. EXTRA_SHORTCUT_INTENT, homeIntent);

       // 发送广播。OK

      sendBroadcast(shortcutIntent);

}

 

 

使用隐式意象,必须在manifest中注册自己的action

 

 <activity

     android:name="com.it360.mobilesafe.activity.LockOneKeyActivity"

     android:label="@string/title_activity_lock_one_key" >

     <intent-filter >

         <action android:name="com.it360.mobilesafe.LOCKONEKEY" />

         <category android:name="android.intent.category.DEFAULT" />

     </intent-filter >

 </activity >

 

 

二、长按桌面弹出的桌面快捷方式创建

 

(仅低版本支持)

 

首先在注册activity时,需要添加一个action为android.intent.action.CREATE_SHOERTCUT的intentFilter.如下所示:

 

<activity android:name="ShortCutTest">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT"/>
</intent-filter>
</activity>

 

 

接下来就是就是设置快捷方式的图标、名称、事件等属性。这里图表的生成,android里提供了专门的方法来生成。

 

public class ShortCutTest extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    
    public void createShortCut(){
        Intent addShortCut;
        //判断是否需要添加快捷方式
        if(getIntent().getAction().equals(Intent.ACTION_CREATE_SHORTCUT)){
            addShortCut = new Intent();
            //快捷方式的名称
            addShortCut.putExtra(Intent.EXTRA_SHORTCUT_NAME , "我的快捷方式");
            //显示的图片
            Parcelable icon = ShortcutIconResource.fromContext(this, R.drawable.icon);
            addShortCut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
            //快捷方式激活的activity,需要执行的intent,自己定义
            addShortCut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent());
            //OK,生成
            setResult(RESULT_OK, addShortCut);
        }else{
            //取消
            setResult(RESULT_CANCELED);
        }
    }
}

 

 

 

 

3, 删除

 

*删除桌面快捷方式

与创建相似,系统根据intent信息进行匹配

 

 

(废弃)

/**

 * 删除程序的快捷方式

 */

private void delShortcut() {

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

 

       // 快捷方式的名称

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

      String appClass = this.getPackageName() + "." + this.getLocalClassName();

      ComponentName comp = new ComponentName(this.getPackageName(), appClass);

      shortcut.putExtra(Intent. EXTRA_SHORTCUT_INTENTnew Intent(Intent.ACTION_MAIN ).setComponent(comp));

      sendBroadcast(shortcut);

      }

}

 

 

 

 

4, 声明权限

AndroidManifest.xml 文件中声明 创建和删除快捷方式时声明权限

 

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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值