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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值