将图像从ios / c ++代码传递到JNI Android

时间:2019-05-20 12:26:49

标签: android c++ arrays java-native-interface byte

我想为用户提供保存当前屏幕截图的功能。 我正在使用cocos2d-x v3.0和c ++,并且是第一次实现此功能。 我做了一些谷歌搜索,发现了这段代码

  

此代码非常适合在ios照片中存储图像

    public static IEnumerable<object> GetEmptyEnumerableOfClass(this Type type)
    {
        return (IEnumerable<object>) type.GetEmptyEnumerableOfType();
    }
  

我要通过jni方法/字节数组将此图像传输到android

任何帮助都是有意义的

注意

  

getWritablePath();现在由于运行时权限问题而无法正常工作,因此不要建议我这样做

1 个答案:

答案 0 :(得分:1)

对于Android方面:

我看不到任何清单代码,但这是创建路径所必需的。放在<application>标签下的</application>之前:

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.cognizant.expressprescriptionregistration.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

此外,如果您使用的是Android SDK 29,也请将其添加到清单中,并放在 <application 标记

android:requestLegacyExternalStorage="true"

在文件夹res下>布局> xml 添加“ file_paths.xml”

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="any text you want here"
        path="Pictures/"/>
</paths>

以及用于设置图像存储位置的Java代码

// Create the file where the photo will be stored
    private File createPhotoFile() {

        // Name of file
        String name = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

        // Location of storage
        File storedDir = getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File photo = null;

        try {

            // Creates file in storedDir
            photo = File.createTempFile(name, ".jpg", storedDir);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return photo;
    }