使用悬浮窗和端内want唤醒APP

在结合日常使用软件的经验和技术分享的want回调后,发现部分APP可以提供全局悬浮窗进行唤醒。

场景:尝试在单框架中实现使用悬浮窗唤醒APP。

HarmonyOS
2024-05-26 14:05:36
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
milchcow

使用的核心API

window.createWindow

startAbility

核心代码解释

主页代码:核心功能是提供为悬浮窗提供创建属性。

import window from '@ohos.window'; 
import common from '@ohos.app.ability.common'; 
@Entry 
@Component 
struct Index { 
   @State message: string = 'Hello World'; 
   private context = getContext(this) as common.UIAbilityContext; 
  //当主页进入后台之后创建一个全局悬浮窗 
  onPageHide() { 
    let floatConfig: window.Configuration = { 
            name: "Float", 
            ctx: getContext(this), 
            windowType: window.WindowType.TYPE_FLOAT 
          }; 
    //设置悬浮窗的属性 
      window.createWindow(floatConfig, (err, win) => { 
           win.resize(200, 200); 
          win.moveWindowTo(50, 150) 
            win.setUIContent('pages/Page2'); 
           win.showWindow(); 
      }); 
  } 
   build() { 
     Row() { 
       Column() { 
         Text(this.message) 
           .fontSize(50) 
           .fontWeight(FontWeight.Bold) 
       } 
       .width('100%') 
     } 
     .height('100%') 
   } 
  }

悬浮窗页代码:提供点击入口,使用want回调拉起应用。

import common from '@ohos.app.ability.common'; 
import Want from '@ohos.app.ability.Want'; 
@Entry 
@Component 
struct Page2 { 
  @State message: string = 'Hello World2'; 
  private context = getContext(this) as common.UIAbilityContext; 
 
  build() { 
    Row() { 
      Column() { 
        Image($r('app.media.icon')) 
          .onClick(() => { 
            // UIAbilityContext 
            let context: common.UIAbilityContext = this.context; 
            let want: Want = { 
              // deviceId为空表示本设备 
              deviceId: '', 
              bundleName: 'com.window.test', 
              // moduleName非必选 
              moduleName: 'entry', 
              abilityName: 'EntryAbility', 
            } 
            // context为调用方UIAbility的UIAbilityContext 
            context.startAbility(want).then(() => { 
              console.info('Succeeded in starting ability.'); 
            }).catch((err: BusinessError) => { 
              console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`); 
            }) 
          }) 
      } 
    } 
  } 
}

总结:

目前数据无法持久化,目前尚未能实现收到消息后的提醒效果。

全局弹窗目前处在需求阶段,消息接收使用全局弹窗效果更好,目前尚未实现。

注明适配的版本信息

IDE:DevEco Studio 4.0.3.600

SDK:HarmoneyOS 4.0.10.10

分享
微博
QQ
微信
回复
2024-05-27 17:03:59
相关问题
基于子窗口实现应用悬浮
181浏览 • 1回复 待解决
如何实现悬浮桌面穿透
358浏览 • 1回复 待解决
横屏应用如何适配华为悬浮?
1106浏览 • 1回复 待解决
在hsp子模块中如何加载悬浮页面
562浏览 • 1回复 待解决
应用如何实现进程保活唤醒
747浏览 • 1回复 待解决
如何实现 app 内置全局悬浮球功能?
684浏览 • 1回复 待解决
AndroidmySQL如何进行交互?
800浏览 • 1回复 待解决
ArkTS可以使用for循环吗
3092浏览 • 1回复 已解决
实况文档是否发布?
1019浏览 • 1回复 待解决
svn客户svn服务版本不同。
1108浏览 • 1回复 待解决