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发送请求生成快捷方式
桌面有一个广播接收者,要在桌面上创建快捷方式就需要发送广播:
<!--设置wallpapaer的activity -->
<!-- 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_INTENT, new 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 " />