• Delphi XE开发 Android 开机自动启动


    https://blog.csdn.net/tanqth/article/details/74357209


    Android 下的广播

    在Android下,要让我们开发的APP能在开机时自动启动,必须使用到Android系统下的广播。Android广播分为两个方面:广播发送者和广播接收者,通常情况下BroadcastReceiver指的是广播接收者(广播接收器)。
    要使广播生效必须先注册广播,实现注册就是告诉系统:要监听什么广播,和监听到之后要做什么动作完成什么工作(自定义广播重写onReceive)。

    注册广播

    注册广播有两种方式:
    1、动态注册(在代码中注册):
    通过代码手工注册。当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。必须在程序运行中才能接收广播。
    2、静态注册(在AndroiMainfest.xml中配置):
    Android不能自动销毁该类广播接收器,也就是说当应用程序关闭后,还是会接收广播。

    开机的广播

    Android启动时,会发出一个系统广播 ACTION_BOOT_COMPLETED,它的字符串常量表示为 “android.intent.action.BOOT_COMPLETED”。要实现开机自启动程序,需要先“捕捉”到这个消息,然后再启动你的程序即可,我们要做的是接收这个消息。因为使用动态注册方式,当程序关闭后就不再接收广播信息,所以我们只能使用静态注册方式完成。

    重写onReceive方法

    当我们完成开机广播的监听后,需要在重写的onReceive方法中去实现程序(或服务)启动。

    在Delphi下实现Android开机启动

    注册广播

    在delphi下要实现开机自动启动需要先在AndroiMainfest.xml中配置广播注册。打开工程中的AndroidManifest.template.xml文件,增加注册内容:

      <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                    android:label="%activityLabel%"
                    android:configChanges="orientation|keyboardHidden"
                    android:launchMode="singleTask">
                <!-- Tell NativeActivity the name of our .so -->
                <meta-data android:name="android.app.lib_name"
                    android:value="%libNameValue%" />
                <intent-filter>  
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>   
            </activity>
            <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" />
            <!-- 以下这段是广播注册内容 -->
              <receiver android:name="com.tanqin.startup"
                    android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </receiver>  
            <!-- 注册完成 -->      
            <%activity%>
            <%receivers%>
        </application>
    
    ---------------------

    其中com.tanqin.startup很重要,是接收广播后需要处理的程序指向。因为目前没找到如何在这里可以直接调用Delphi写的类或方法或其他什么(我不否定他以后可能会可以达到这个要求 ,至少现在不行),所以这里只能使用JAVA来处理(也就说我们这里现在必须使用JAR来实现)。

    重写onReceive方法

    这段需要用JAVA来完成,在我上传的Demo中已完成代码并生成JAR文件,方便对JAVA不熟悉的朋友,你可以直接使用这个文件。

    下载地址:http://download.csdn.net/detail/tanqth/9888704

    package com.tanqin;
    
    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Intent;
    import android.content.Context;
    
    public class startup extends BroadcastReceiver
    {
    
            @Override
            public void onReceive(Context context, Intent intent) 
            {
               Intent sintent = new Intent();
               sintent.setClassName(context, "com.embarcadero.firemonkey.F
    MXNativeActivity");
               sintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
               context.startActivity(sintent);  
            }
    
    }
    
    

    其他工作

    最后,我们需要将JAR引入到Delphi工程中,完成开机启动权限的添加。

    使用Demo的说明

    Demo可以在csdn下载中下载使用,地址:http://download.csdn.net/detail/tanqth/9888704

    下载后请注意画框的两个文件:
    这里写图片描述

    AndroidManifest.template.xml内容:

    这里写图片描述

    在工程中增加JAR包:

    右键弹出菜单中选择增加: 
    这里写图片描述

    增加后的情况: 
    这里写图片描述

    添加开机启动权限

    这里写图片描述

    这样,你的APP即可以系统启动后完成自动启动了

  • 相关阅读:
    liunx基本命令
    liunx—awk
    python—__name__
    python—url路径拼接/编码
    python—__init__作用
    单元测试
    2、选择排序
    1、算法简介
    在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.
    如何明确区分代码中的1和l
  • 原文地址:https://www.cnblogs.com/karkash/p/9740354.html
Copyright © 2020-2023  润新知