uni-app 系统设置当前应用开机自启动 开机启动应用时 Splash结束后无法进入应用

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app 系统设置当前应用开机自启动 开机启动应用时 Splash结束后无法进入应用

操作步骤:

  • 设置开机自启动,打开应用,重启平板电脑,等待进入页面

预期结果:

  • 正常进入应用,显示界面

实际结果:

  • 无法进入应用,白屏

bug描述:

  • 系统设置当前应用开机自启动,开机启动应用时,Splash结束后无法进入应用,白屏,不知道为什么,点开两次后再开机自启动后就好了,
项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 23H2(0S内郚版本22631.4169)
HBuilderX类型 正式
HBuilderX版本号 4.24
手机系统 Android
手机系统版本号 Android 10
手机厂商 远众技术
手机机型 QUAD-CORE A133 c4
页面类型 vue
vue版本 vue2
打包方式 离线
项目创建方式 HBuilderX
App下载地址或H5网址 http://106.15.183.188:8002/apks/beer1.2.1.apk

运行日志.txt


1 回复

在 uni-app 中实现应用开机自启动,并在开机启动应用时确保从 Splash 屏幕结束后能够顺利进入应用主页面,通常需要结合原生代码和平台特定的配置。以下是一个基于 Android 和 iOS 平台的示例,展示如何实现这一功能。

Android 平台

  1. 修改 AndroidManifest.xml: 确保在 AndroidManifest.xml 中添加开机自启动的权限和广播接收器。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".BootCompletedReceiver" android:enabled="true" android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
  1. 创建 BootCompletedReceiver 类
package com.yourpackage;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent startIntent = new Intent(context, YourMainActivity.class);
            startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(startIntent);
        }
    }
}

iOS 平台

对于 iOS,你需要使用 Background ModesLocal Notifications 来模拟开机自启动行为(iOS 不允许真正的开机自启动,但可以通过 Local Notification 在设备解锁后启动应用)。

  1. 在 Xcode 中启用 Background Modes: 在 Xcode 项目的 Capabilities 标签页中启用 Background Modes,并勾选 Remote notificationsBackground fetch

  2. 使用 Local Notification: 在设备解锁时,通过 Local Notification 唤醒应用。这通常需要在应用首次运行时注册一个 Local Notification,在用户解锁设备时触发。

// Objective-C 示例代码片段,用于注册 Local Notification
- (void)scheduleLocalNotification {
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1]; // 立即触发,实际使用时根据需要设置
    notification.alertBody = @"应用已启动";
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
}

uni-app 部分

确保你的 Splash 页面在加载完毕后能够正确跳转到主页面。这通常通过 onLoadonReady 生命周期函数实现。

// 在 pages/splash/splash.vue 中
export default {
    onReady() {
        setTimeout(() => {
            uni.navigateTo({
                url: '/pages/index/index'
            });
        }, 3000); // 假设 Splash 显示 3 秒
    }
}

请注意,以上代码示例需要根据具体项目结构和需求进行调整。此外,由于平台限制和策略变化,实现方式可能需要随时更新。

回到顶部