判断shutcut是否安装
"com.android.launcher.permission.READ_SETTINGS"
/>
这段代码在模拟器上运行没有问题,但是在htc s510e运行报异常
Failed to find provider info for com.android.launcher2.settings
通过
但因htc所有包发现htc中的
launcher被定制了改名为com.htc.launcher,所以这一段代码的通用行很差一般不对shortCut进行判断都是直接添加
public boolean isAddShortCut() {
boolean isInstallShortcut = false;
final ContentResolver cr = this.getContentResolver();
int versionLevel = android.os.Build.VERSION.SDK_INT;
String AUTHORITY = "com.android.launcher2.settings";
//2.2以上的系统的文件文件名字是不一样的
if (versionLevel >= 8) {
AUTHORITY = "com.android.launcher2.settings";
} else {
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[] { getString(R.string.app_name) }, null);
if (c != null && c.getCount() > 0) {
isInstallShortcut = true;
}
return isInstallShortcut;
}
action android:name="android.intent.action.CREATE_SHORTCUT" />
public class Activity01 extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent addShortcut;
Log.e("-----------------------", getIntent().getAction()+" : "+Intent.ACTION_CREATE_SHORTCUT);
if (getIntent().getAction().equals(Intent.ACTION_CREATE_SHORTCUT))
{
addShortcut = new Intent();
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, "发送邮件");
Parcelable icon = Intent.ShortcutIconResource.fromContext(this,R.drawable.mail_edit);
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,icon);
Intent mailto = new Intent(Intent.ACTION_SENDTO, Uri.parse( "mailto:[email protected]" ));
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, mailto);
setResult(RESULT_OK,addShortcut);
}
finish();
}
}
直接添加shortcut到桌面:同样这给方法在模拟器上添加成功但是在HTC S510e验证失败,应该也是HTC订制导致的,查看android的源码了解到icon的添加(也就是在里面的icon列表)和shortcut的添加都是通过recevier来接受通知的,但是他定义的Action:
public static final String ACTION_INSTALL_SHORTCUT ="com.android.launcher.action.INSTALL_SHORTCUT";
我怀疑可能是htc的这个值出现了变化
权限声明
uses-permission android:name=
"com.android.launcher.permission.INSTALL_SHORTCUT"
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
// 设置属性
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, "sdjkdsf");
ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this.getApplicationContext(), R.drawable.ic_launcher);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON,iconRes);
// 是否允许重复创建
shortcut.putExtra("duplicate", false);
//设置桌面快捷方式的图标
Parcelable icon = Intent.ShortcutIconResource.fromContext(this,R.drawable.ic_launcher);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,icon);
//点击快捷方式的操作
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClass(ShortcutActivity.this, ShortcutActivity.class);
// 设置启动程序
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
//广播通知桌面去创建
this.sendBroadcast(shortcut);
删除shortcut的代码和权限声明
uses-permission android:name=
"com.android.launcher.permission.UNINSTALL_SHORTCUT"
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);
如果有直接添加shortcut的方法且通用行很好的,希望赐教一下