【AppInventor】快捷方式扩展插件

网友投稿 2019-08-11 13:33

暑期余额已经不足,这个暑期主要还是用在学习新知识上,比较少成果,对App Inventor唯一的贡献恐怕就只有这个小插件了

这是一个用于在手机桌面创建快捷方式的扩展插件,注意仅在Android O(即Android 8.0,API级别26以下)上有效

https://cdn.china-scratch.com/timg/190813/1333291138-0.jpg

函数

该扩展插件目前只提供一个函数,用于在手机桌面创建快捷方式

CreateShorcut()          

https://cdn.china-scratch.com/timg/190813/1333301545-1.jpg

该函数接受四个参数的输入,分别如下:

  • icon:输入快捷方式图标的位置,格式为/storage/emulated/0/…… 

    注意:一般图片大小不要大于2M,否则创建快捷方式的时候就会有Failture from sysytem的错误。

  • name:快捷方式的名称,即所创建的快捷方式的名称

  • packageName:包名(或类名),如果输入软件的包名那么点击快捷方式就会打开软件Screen1,也可以输入软件包名.屏幕名,此时点击快捷方式就会打开指定的屏幕。 

    注意:如果输入别的软件的包名,点击快捷方式仍然会默认打开创建快捷方式的软件的Screen1,如果确需打开其它app,请在屏幕初始化事件中跳转

  • duplicate:是否允许重复创建,输入真以允许重复创建


权限

很多系统默认禁止应用创建快捷方式,请确认已授予相应的权限给app,由于本扩展所需的特殊权限,所以相关功能无法在AI伴侣中调试,请导出apk安装进行调试。


其它说明

  1. 各个修改版的安卓系统对于创建快捷方式的策略不同,所以不能保证在所有设备上都能正常使用;

  2. 建议创建快捷方式后提醒用户我们已尝试创建快捷方式,请到桌面检查,而不是我们已成功创建快捷方式

  3. 为提高用户体验,建议在必须的地方才使用快捷方式

  4. 上面所说的所有参数留空依然可以成功创建快捷方式

  5. 不同的系统创建快捷方式的权限名不同,目前插件中已经添加了3个备选权限名,但不排除在部分系统无法获取相应的权限

示例应用:

https://cdn.china-scratch.com/timg/190813/1333303617-2.jpg

示例应用的录屏视频:

观看视频时注意左上角的屏幕名称,快捷方式被点击后直接跳转到了Screen2(录屏快捷方式的英文打错了,应为Shortcut)

视频没有声音,请放心查看,流量党请注意视频大小8.89M


链接列表

因公众号不能放超链接,所以全部链接都展示了地址,请长按地址并复制到浏览器打开,本文首发于Thunkable,所以部分文件要跳转到Thunkable下载。

  • 示例视频下载链接 https://gitee.com/PeterZhong1219/PeterZhong1219/raw/master/ExternalReleases/ShortcutScreeRecode.mp4

  • 扩展组件(aix文件)下载链接:https://community.thunkable.com/uploads/default/original/3X/e/8/e8492e656018d678289f04d7a14f4d480d25d975.aix(亦可点击“阅读原文”查看首发英文版说明文档并下载)

  • 示例程序apk文件下载链接:https://community.thunkable.com/uploads/default/original/3X/a/9/a916124b733cd103e3b101923bf7837c5b3cd9ab.apk

  • 示例程序源码(aia文件)下载链接:https://community.thunkable.com/uploads/default/original/3X/0/a/0ab02c35bccf6532e24479cf3be58dc2653bec57.aia

  • 我们使用了 @Taifun的工具扩展组件来获取软件的包名,我们公众号以前有翻译过这个组件,点击查看

  • 为了达到最好的兼容性,使用原版的App Inventor,所以这个示例程序是使用17coding制作的,这是网站链接:http://www.17coding.net/,大家在制作软件时推荐使用wxbit版本的App Inventor,功能更新更强大,界面更美观,网站链接:app.wxbit.com

项目源码如下

package com.peterzhong.shortcut;
import java.io.FileInputStream;import java.io.FileNotFoundException;
import com.google.appinventor.components.annotations.DesignerComponent;import com.google.appinventor.components.annotations.SimpleFunction;import com.google.appinventor.components.annotations.SimpleObject;import com.google.appinventor.components.annotations.UsesPermissions;import com.google.appinventor.components.common.ComponentCategory;import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;import com.google.appinventor.components.runtime.Component;import com.google.appinventor.components.runtime.ComponentContainer;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.content.Context;
@DesignerComponent(description = "To create a shorcut on the desktop of an Android phone below O.Need the permission of creating a shortcut",iconName = "images/extension.png",nonVisible = true,version = 1,category = ComponentCategory.EXTENSION,showOnPalette = true)
@SimpleObject(external = true)
@UsesPermissions(permissionNames = "com.android.launcher.permission.INSTALL_SHORTCUT,com.android.launcher2.permission.INSTALL_SHORTCUT,com.android.launcher3.permission.INSTALL_SHORTCUT")public class Shorcut extends AndroidNonvisibleComponent implements Component{Context context;FileInputStream in;public Shorcut(ComponentContainer container) {super(container.$form());context = (Context) container.$context();}@SimpleFunction(description = "To create a shorcut on the desktop of an Android phone below O")public void CreateShortcut(String name, String icon,String packageName,boolean duplicate) {Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");Bitmap iconObj = BitmapFactory.decodeFile(icon);shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, iconObj);shortcutIntent.putExtra("duplicate", duplicate);Intent launchIntent = new Intent();launchIntent.setClassName(context, packageName);shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent);context.sendBroadcast(shortcutIntent);}}

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com