`
敲敲大葱头
  • 浏览: 29405 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

由FileManager添加桌面快捷方式所引发的知识点思考

 
阅读更多

 

在当前Android同比于IOS的优点中,Android系统的桌面Widget、消息管理器、功能开放所带来的便捷无疑是提升用户体验的重要一点。

今天给大家带来关于创建桌面快捷方式的知识点,包括创建文件快捷方式、创建APK快捷方式以及一些注意事项。

 

众所周知,我们能在所有程序里看到应用的图标是因为我们将程序的入口类

在AndroidManiest设置为:<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> 

后系统会自动为我们在所有程序里添加图标。

 

但以上方法无法做到将快捷方式添加到Launcher的桌面上(比如UC、QQ都有增加桌面快捷方式的功能)

 

一、增加桌面快捷方式

我们可以通过如下方法添加:

1.打开权限:在AndroidManifest.xml中添加权限:com.android.launcher.permission.INSTALL_SHORTCUT

2.制作Intent:

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

2>// 快捷方式的"名称"

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

 // 快捷方式的"图标"  

      ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);  

      shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);  

3>// 指定要"做什么" 的Intent

 简单的,我们可以创建电话快捷方式、邮件快捷方式、短信快捷方式等

      Uri uri = Uri.parse("tel:0800000123");   

 Intent myIntent = new Intent(Intent.ACTION_DIAL, uri); 

 其次,我们可以创建不同类型文件的快捷方式

 Intent myIntent = new Intent(mimetype, uri/*文件绝对路径或者数据库路径*/); 

 重要的,我们可以对自己的应用创建某个功能模块的快捷方式,一键进入功能,非常方便。

 // 指定快捷方式所需要打开的目标类: 如 com.android.xxx.xxx  

 ComponentName comp = new ComponentName(this.getPackageName()/*包名*/, appClass/*目标类*/); 

      // 为Intent自定义一个action,此action可以用来辨别进入应用的方式等 

      String action = "com.action.xxx";    

      shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(action).setComponent(comp));  

3.最后,将制作好的过intent通广播发送给launcher

后期,我们还可以进行创建非自身应用的快捷方式、桌面长按列表里的快捷方式等,自己定义的action最重要。

   

二、删除桌面快捷方式

粗略的删除:

1.打开权限:在AndroidManifest.xml中添加权限:com.android.launcher.permission.UNINSTALL_SHORTCUT

2.制作Intent:同样按照上述的方法,但intent指明为:Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");

3.最后,将制作好的过intent通广播发送给launcher  

 

准确的删除:

通过launcher数据库具体查询吧,还有待自己去进一步搞。

        ContentResolver cr = mapViewActivity.getContentResolver();

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[] {mapViewActivity.getString(R.string.app_name).trim()}, null);

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

代表存在 ;

        }

 

以上是快捷方式的添加和删除,接下来介绍一些这次用到的解决因增加程序入口引发的栈序紊乱的解决办法。

由于快捷方式、桌面widget等增加入口的方式会导致栈序紊乱,特别是home键返回桌面的问题,那么,解决问题的根本办法就是通过需求的具体分析,设计出在某些时刻的清栈。

我们经常用到的通过launchMode改变activity的运行方式由于改变了activity的特性而变得不够灵活,所以通过API里intent的flag去释放栈空间是最有效的方法。

我们可以利用以下几点:

1.FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP:清除非自己

2.FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP:类似singleTop的效果,只不过是直接弹出栈,直到相应activity到达栈定

3.FLAG_ACTIVITY_NO_HISTORY:无历史性的前行

当然了,这些flag会和很多基础flag有冲突,比如和正常的入口类flag等等,需要择优选择和规避,还有一些其他的flag用法,大家可以去API具体细细研究,API无限可能。

 

  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics