移驾github
通过Uri方式启动Activity
/**
* 通过设置Uri启动另一个网址或者页面,此为调用系统浏览器打开百度地址,项目中可以在webview打开
*/
public void startActivityByUri() {
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
创建桌面图标跳转至指定Uri
/**
* 创建桌面快捷图标跳转至指定的Uri,使用此方式删除应用之后,创建的快捷图标不会删除,
* 如果采用跳转到本App的Activity的方式生成桌面快捷图标会删除
* 启动之后为打开另一个App,点击返回之后会生成一次按照该App的回退方式返回
*/
public void createShortcutToUri() {
/**
* pending:悬而未决,即将发生。 就是创建的快捷方式点击之后跳转的Intent
* 同样不可以使用Intent.ACTION_MAIN,点击图标之后显示未安装该应用
*/
Uri uri = Uri.parse("http://www.baidu.com");
Intent pendingIntent = new Intent(Intent.ACTION_VIEW, uri);
Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "我是图标名称");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, R.mipmap.ic_launcher);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, pendingIntent);
sendBroadcast(shortcutIntent);
}
创建桌面图标跳转至指定Activity
/**
* people 创建桌面图标跳转至本App的指定Activity,随本App卸载一起消失
*/
public void createShortcutToActivity(String name, int shortcutIcon) {
Intent pendingIntent = new Intent(Intent.ACTION_VIEW);
pendingIntent.setClass(this, PendingActivity.class);
pendingIntent.putExtra("携带参数", "我是携带的参数: " + name);
Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
Parcelable icon = Intent.ShortcutIconResource.fromContext(getApplicationContext(), shortcutIcon);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
shortcutIntent.putExtra("duplicate", false);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, pendingIntent);
sendBroadcast(shortcutIntent);
}
创建桌面图标跳转至指定Activity 别名方式
/**
* 生成多个桌面图标的话,在一般手机上只要更换图标的名称就是可以的,但是最近遇到一个相当棘手的bug 如下:
* <p>
* 需要创建多个桌面快捷方式,但是在中兴ZTE A2015 6.0.1等部分机型上若生成快捷方式指定跳转至一个Activity的情况下(比如更换名称但都是跳转到PendingActivity_1这个界面),
* ,首次可以生成多个桌面图标,但是点击Home键或者返回至桌面后,只能传递数据覆盖,无法生成多个快捷方式,
* 但是也不能在清单文件注册无限个Activity,使用代理Activity的话,也相当于替换Activity,(代理解释参考:https://zhuanlan.zhihu.com/p/21348609)
* 同样需要手动创建多个Activity,但是不满足需求,现在的问题是 生成桌面快捷方式需要不同的Activity才能创建多个,否则只能创建一个,可能会创建N多个
* <p>
* 初期想到的解决办法是,使用别名的方法。在清单文件显示写入多个别名,不可能写N多个,虽有限制,但可以解决仅仅能生成一个问题,但使用该方法对于正常机型确是一种累赘
* 实现方式如下,仅供学习,但不采用
*
* @param name
* @param i
*/
public void createShortcutToActivityAlisa(String name, int i) {
Intent pendingIntent = new Intent();
pendingIntent.setAction(Intent.ACTION_VIEW);
pendingIntent.setClass(this, PendingActivity.class);
/**
* 注意!!!别名的name需要加上包名,否则图标不会找到,显示未安装该应用的提示
*
* 使用别名的方式在清单文件中注册俩个(Activity别名参考:http://www.open-open.com/lib/view/open1483148577810.html)
* com.simple.mydemo.PendingActivity_1_Alias_1
* com.simple.mydemo.PendingActivity_1_Alias_2
* 测试方法略显粗暴!!所以就写了俩个动态传进来末尾不同的数字
* 在实际项目总若是保存在缓存中,进行清理的时候数据可能会失效,所以需要慎重处理
*
*/
pendingIntent.setComponent(new ComponentName(this.getPackageName(), "com.simple.mydemo.PendingActivity_Alias_" + i));
Bundle bundle = new Bundle();
bundle.putString("携带参数", "我是携带的参数: " + name);
pendingIntent.putExtras(bundle);
/**
* 网上搜到有这条属性,有需求可添加
* 设置这条属性,可以使点击快捷方式后关闭其他的任务栈的其他activity,然后创建指定的acticity
* (参考:http://blog.csdn.net/bjp000111/article/details/51363981)
*/
Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "我是图标名称");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, R.mipmap.ic_launcher);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, pendingIntent);
sendBroadcast(shortcutIntent);
/**
* 安卓各大厂商修改ROM,可能导致有的字段不支持,详情移架医生早年写的博客,进行数据库之类的分析,下面是摘自其中utils类进行查看
* http://www.jianshu.com/p/dc3d04337d00?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq
*/
ShortcutSuperUtils.isShortCutExist(this, name, shortcutIntent);
}
创建桌面图标跳转至指定Activity Scheme方式
/**
* 精品来了,App内部通过Scheme的方式进行创建图标,缺点:每次的图标启动的页面参数写死,实际项目中,若后台参数改变则地址可能找不到
* 但可以满足需求,也可以解决,比如携带参数进来之后,然后进入页面的时候可以更改参数重新刷一次页面
* <p>
* (精品地址:http://blog.csdn.net/wanggsx918/article/details/40541993)
*
* @param name
*/
public void createShortcutToScheme(String name) {
/**
* 仅此而已,不可进行其他的与本App相关的设置,然后在AndroidManifest文件进行配置
* 对Activity添加意图过滤器,可以添加多个intent—filter进行筛选
*
*/
Intent pendingIntent = new Intent();
pendingIntent.setAction(Intent.ACTION_VIEW);
pendingIntent.setData(Uri.parse("http://www.baidu.com"));
pendingIntent.putExtra("携带参数", "我是携带的参数: " + name);
/**
* 创建桌面快捷方式的图标比较单一,目前网址的资料大多数12,13年的,Android7.0以后会提供ShortcutInfo的Api,效果也比较cool
* 之前遇到的问题,应该在6.0的部分机型会出现,但是Scheme的方法完美的解决问题
*/
Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "我是图标名称");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, R.mipmap.ic_launcher);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, pendingIntent);
sendBroadcast(shortcutIntent);
}
清单文件参考:http://www.jianshu.com/p/f77b5e1d76c9