栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android Thermal Demo小记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android Thermal Demo小记

使用Android Studio的New Project向导,创建一个Android项目。在向导中,注意将Minimum SDK的值设为至少API 30,因为Thermal的API需要。
运行一下,好,应用成功运行。
在Android Studio的Project面板中,选择Android视图,并点选app模块,依次选择菜单栏File->Add C++ to Module。完成之后,打开app模块下自动生成的cpp文件、CMakeLists.txt文件,其中CMakeLists.txt内容如下所示:

cmake_minimum_required(VERSION 3.18.1)

project("myapplication1")

add_library(myapplication1 SHARED myapplication1.cpp)

find_library(log-lib log)

target_link_libraries(myapplication1 ${log-lib})

接下来,打开MainActivity.java,并修改为如下所示:

public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("myapplication1");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        exec();
    }

    private native void exec();
}

接下来,为MainActivity.java生成对应的JNI头文件com_hsc_myapplication1_MainActivity.h,并把它放在CMakeLists.txt同级目录下。打开cpp文件,输入内容如下所示:

#include "android/api-level.h"
#include "android/log.h"
#include "android/thermal.h"
#include "com_hsc_myapplication1_MainActivity.h"

extern "C" {
JNIEXPORT void JNICALL Java_com_hsc_myapplication1_MainActivity_exec
        (JNIEnv *, jobject) {
    const int api = android_get_device_api_level();
    if (api >= 30) {
        AThermalManager *thermalManager = AThermal_acquireManager();
        AThermalStatus status = AThermal_getCurrentThermalStatus(thermalManager);
        int iState;
        switch (status) {
            case ATHERMAL_STATUS_CRITICAL:
                iState = 4;
                break;
            case ATHERMAL_STATUS_EMERGENCY:
                iState = 5;
                break;
            case ATHERMAL_STATUS_ERROR:
                iState = -1;
                break;
            case ATHERMAL_STATUS_LIGHT:
                iState = 1;
                break;
            case ATHERMAL_STATUS_MODERATE:
                iState = 2;
                break;
            case ATHERMAL_STATUS_NONE:
                iState = 0;
                break;
            case ATHERMAL_STATUS_SEVERE:
                iState = 3;
                break;
            case ATHERMAL_STATUS_SHUTDOWN:
                iState = 6;
                break;
            default:
                iState = -1;
                break;
        }
        __android_log_print(ANDROID_LOG_DEBUG, "Harry", "%d", iState);
        AThermal_releaseManager(thermalManager);
    }
}
}

编译一下,报错如下所示:

C/C++: ld: error: undefined symbol: AThermal_acquireManager
C/C++: ld: error: undefined symbol: AThermal_getCurrentThermalStatus
C/C++: ld: error: undefined symbol: AThermal_releaseManager

修改CMakeLists.txt,如下所示:

...
find_library(log-lib log)
find_library(android-lib android)
target_link_libraries(myapplication1 ${log-lib} ${android-lib})

运行一下,得到结果如下所示:

05-17 18:23:59.366 19238 19238 D Harry   : 0

其它:

  • CMake 3.18.1
  • NDK 24.0.8215888
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/894079.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号