【鸿蒙】调用华为打印服务
不知道有没有发现,鸿蒙系统打开文档,选择打印会有一个【华为打印】的选项,其实这个功能就类似于拉起第三方应用,只需要知道包名和启动页面调用startAbility
就行了
Intent intentService = new Intent(); Set entities = new HashSet(); entities.add("android.intent.category.LAUNCHER"); final String appPkg = "com.huawei.printservice"; final String AbilityName = "com.huawei.print.ui.MainPrintPreviewActivity"; // 通过Intent中的OperationBuilder类构造operation对象,指定设备标识(空串表示当前设备)、应用包名、Ability名称 Operation operation = new Intent.OperationBuilder() .withDeviceId("") .withBundleName(appPkg) .withAbilityName(AbilityName) .withAction("android.intent.action.MAIN") .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT) .withEntities(entities) .build(); // 把operation设置到intent中 intentService.setOperation(operation); startAbility(intentService);
但是目前有个问题,不知道怎么传递文档过去,希望后续官方文档有说明
顺便记录一下常用的应用的包名及对应的启动页
//微信 包名 com.tencent.mm 启动类名:com.tencent.mm.ui.LauncherUI //QQ 包名 com.tencent.mobileqq 启动类名:com.tencent.mobileqq.activity.HomeActivity //支付宝 包名:com.eg.android.AlipayGphone 启动类名com.eg.android.AlipayGphone.FastStartActivity //设置 包名:com.android.settings launchApp(this.getAbility(), "com.eg.android.AlipayGphone", "com.eg.android.AlipayGphone.FastStartActivity");
/** * 打开第三方APP 如果已经安装直接打开,没有安装打开应用市场 * tencent * * @param appPkg 包名 * @param abilityName 打开的哪个activity */ private void launchApp(Ability ability, String appPkg, String abilityName) { try { if (isAPPInstall(ability, appPkg)) { Intent intent = new Intent(); Set entities = new HashSet(); entities.add("android.intent.category.LAUNCHER"); Operation operation = new Intent.OperationBuilder() .withDeviceId("") .withBundleName(appPkg) .withAbilityName(abilityName) .withAction("android.intent.action.MAIN") .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT) .withEntities(entities) .build(); intent.setOperation(operation); ability.startAbility(intent); } else { Intent intent = new Intent(); //跳转到应用商场 Operation operation = new Intent.OperationBuilder() .withUri(Uri.parse("market://details?id=" + appPkg)) .withAction("android.intent.action.VIEW") .withBundleName("com.huawei.appmarket") .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT) .build(); //跳转到网站上下载 /*Operation operation = new Intent.OperationBuilder() .withUri(Uri.parse(url)) .build();*/ intent.setOperation(operation); ability.startAbility(intent); } } catch (Exception e) { e.printStackTrace(); } }
/** * 判断app是否安装 * * @param appPkg 包名 */ private boolean isAPPInstall(Ability ability, String appPkg) { try { ability.getBundleManager().isApplicationEnabled(appPkg); return true; } catch (java.lang.IllegalArgumentException ex) { return false; } }
补充一个android 中的调用打印服务吧 同样也是不知道怎么传值
Intent intent = new Intent(); ComponentName comp = new ComponentName("com.huawei.printservice", "com.huawei.print.ui.MainPrintPreviewActivity"); intent.setComponent(comp); intent.setAction("android.intent.action.MAIN"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
暑期编程PK赛 得CSDN机械键盘等精美礼品!