C++学习(二九六)Android的Bundle

Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。当Bundle传递的是对象或对象数组时,必须实现Serializable 或Parcelable接口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Android NDK 来编写 C++ 代码获取 Android 设备的分辨率。以下是一个简单的示例: 1. 创建一个名为 `jni` 的文件夹,用于存储 JNI 代码。 2. 在 `jni` 文件夹中创建一个名为 `get_resolution.cpp` 的文件,并添加以下内容: ```c++ #include <jni.h> #include <android/native_window.h> #include <android/native_window_jni.h> extern "C" JNIEXPORT jintArray JNICALL Java_com_example_myapplication_MainActivity_getScreenResolution(JNIEnv *env, jobject thiz, jobject surface) { jintArray result; int32_t width = 0, height = 0; ANativeWindow* native_window = ANativeWindow_fromSurface(env, surface); if (native_window != nullptr) { width = ANativeWindow_getWidth(native_window); height = ANativeWindow_getHeight(native_window); ANativeWindow_release(native_window); } result = env->NewIntArray(2); jint fill[2] = {width, height}; env->SetIntArrayRegion(result, 0, 2, fill); return result; } ``` 3. 在 `jni` 文件夹中创建一个名为 `Android.mk` 的文件,并添加以下内容: ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := get_resolution LOCAL_SRC_FILES := get_resolution.cpp include $(BUILD_SHARED_LIBRARY) ``` 4. 在 `jni` 文件夹中创建一个名为 `Application.mk` 的文件,并添加以下内容: ```makefile APP_ABI := all APP_PLATFORM := android-21 ``` 5. 在 Android 项目的 `build.gradle` 中添加以下配置: ```gradle android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "-std=c++11" } } } externalNativeBuild { cmake { path "CMakeLists.txt" } } ... } ``` 6. 在 Android 项目的根目录中创建一个名为 `CMakeLists.txt` 的文件,并添加以下内容: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library(get_resolution SHARED src/main/jni/get_resolution.cpp) find_library(log-lib log) target_link_libraries(get_resolution ${log-lib}) ``` 7. 在 Java 中调用 C++ 代码获取分辨率: ```java public class MainActivity extends AppCompatActivity { static { System.loadLibrary("get_resolution"); } private native int[] getScreenResolution(Surface surface); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SurfaceView surfaceView = findViewById(R.id.surface_view); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { int[] resolution = getScreenResolution(holder.getSurface()); int width = resolution[0]; int height = resolution[1]; Log.d("MainActivity", "Screen resolution: " + width + " x " + height); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }); } } ``` 注意:在 C++ 中使用 `ANativeWindow_fromSurface` 函数需要传入 `Surface` 对象,因此需要在 Java 中创建 `Surface` 对象并将其传递给 C++ 代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值