首页 > 学院 > 开发设计 > 正文

APP实用开发—桌面添加快捷图标

2019-11-09 14:46:41
字体:
来源:转载
供稿:网友

原理:

这里写图片描述 从图上可以看出,Android大致分7步完成快捷方式的创建:

**第1步:**Android系统的launcher程序会调用它的pickShortcut()方法去启动系统的pickActivity程序(应用);

**第2步:**pickActivity程序(应用)启动后会调用它的CheckIntentFilter()方法,去在系统中寻找可以创建快捷方式的应用有哪些,并且列举出来。只要第三方 App用标签进行了相应的注册(具体如何注册请看下面的代码)就可以被发现并列举出来;

第3步:调用Choseitem()方法选择创建谁的快捷方式;

第4步:完成第三步之后,pickActivity程序(应用)会将选择的消息通过Intent返回给系统的launcher;

**第5步:**launcher程序获得pickActivity返回的消息后,就会知道创建谁的快捷方式,通过调用PRocessShortcut()方法去启动第三方App中负责创建快捷方式 的Activity,这个Activity就是第二步中我们提到的用标签进行了注册的Activity;

第6步:第三方App中负责创建快捷方式的Activity会将快捷方式的名称,图标和点击后跳转路径通过Intent返回给launcher;

**第7部:**launcher收到返回的消息后调用本身的ComPleteAddShortcut()方法完成快捷方式的创建,并显示在桌面上;

权限

<!-- 添加快捷方式 --> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

这个方法一般放在引导页面

private void createShortCut() { boolean b = SharedPreferencesTool.getBoolean(this, Constants.SHORTCUT, false); if (!b) { Intent intent = new Intent(); intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); //通过intent告诉launcher快捷方式的细节 intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "淘宝");//设置快捷方式的名称 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);//设置快捷方式的图标 Intent value = new Intent(this,SplashActivity.class); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, value);//设置快捷方式的操作 sendBroadcast(intent); //如果创建了快捷方式,保存一个标示,表示快捷方式创建 SharedPreferencesTool.saveBoolean(this, Constants.SHORTCUT, true); } }

或者 用标签进行注册

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

向Launcher返回相关数据

public class CreatShortCut extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getIntent().getAction().equals(Intent.ACTION_CREATE_SHORTCUT)) { Intent _returnIntent = new Intent(); _returnIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "csx");// 快捷键的名字 _returnIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,// 快捷键的ico Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher)); _returnIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(this, MainActivity.class));// 快捷键的跳转Intent setResult(RESULT_OK, _returnIntent);// 发送 finish();// 关闭本Activity } }}

拷贝数据库的方法

引用外置的数据库,在引导页面初始化

private void copyDb(String fileName) { File file = new File(getFilesDir(), fileName); if (!file.exists()) { //1.获取assets目录的管理者 assets = getAssets(); InputStream in = null; FileOutputStream out = null; try { //2.读取资源 in = assets.open(fileName);//打开assets目录的资源,fileName:资源的名称 //getCacheDir():data/data/应用程序包名/cache //getFilesDir():data/data/应用程序包名/files out = new FileOutputStream(file); //3.读写操作,实现拷贝 byte[] b = new byte[1024];//缓存区域 int len = -1;//保存读取长度 while((len = in.read(b)) != -1){ out.write(b, 0, len); } } catch (IOException e) { e.printStackTrace(); }finally{ //关流操作 if (out != null) { try { out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (in != null) { try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表