Browse Source

detect external storage( sdcard ) via java API

Pal Lockheart 7 years ago
parent
commit
13a44e040c

+ 1 - 1
android/build.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This should be changed to the name of your project -->
-<project name="SDLActivity" default="help">
+<project name="SDLPal" default="help">
 
     <!-- The local.properties file is created and updated by the 'android' tool.
          It contains the path to the SDK. It should *NOT* be checked into

+ 1 - 1
android/jni/Application.mk

@@ -1,3 +1,3 @@
 APP_STL := stlport_static
-APP_ABI := armeabi-v7a x86
+APP_ABI := armeabi-v7a
 APP_PLATFORM := android-9

+ 4 - 3
android/jni/src/Android.mk

@@ -9,15 +9,16 @@ LOCAL_MODULE := main
 
 OGG_PATH := ../../../liboggvorbis
 
-LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/$(SDL_PATH)/include $(LOCAL_PATH)/$(OGG_PATH)/include $(LOCAL_PATH)/$(OGG_PATH)/src
+LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/../../.. $(LOCAL_PATH)/$(SDL_PATH)/include $(LOCAL_PATH)/$(OGG_PATH)/include $(LOCAL_PATH)/$(OGG_PATH)/src
 
 LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \
     $(wildcard $(LOCAL_PATH)/../../../*.cpp) $(wildcard $(LOCAL_PATH)/../../../*.c) \
     $(wildcard $(LOCAL_PATH)/../../../adplug/*.c) $(wildcard $(LOCAL_PATH)/../../../adplug/*.cpp) \
     $(wildcard $(LOCAL_PATH)/../../../liboggvorbis/src/*.c) \
-    $(wildcard $(LOCAL_PATH)/../../../libmad/*.c)
+    $(wildcard $(LOCAL_PATH)/../../../libmad/*.c) \
+    $(wildcard $(LOCAL_PATH)/*.c) \
 
-LOCAL_CFLAGS += -std=gnu99
+LOCAL_CFLAGS += -std=gnu99 -DPAL_HAS_PLATFORM_SPECIFIC_UTILS
 
 LOCAL_CPPFLAGS += -std=c++11
 

+ 80 - 0
android/jni/src/android_jni.c

@@ -0,0 +1,80 @@
+#include <jni.h>
+#include "palcommon.h"
+#include "global.h"
+#include "palcfg.h"
+
+char externalStoragePath[255];
+/* 
+ * Class:     com_codeplex_sdlpal_PalActivity 
+ * Method:    setExternalStorage 
+ * Signature: (Ljava/lang/String;)V
+ */  
+JNIEXPORT void JNICALL Java_com_codeplex_sdlpal_PalActivity_setExternalStorage(JNIEnv *env, jclass cls, jstring j_str)  
+{  
+    const jchar* c_str= NULL;  
+    char* pBuff = externalStoragePath;  
+    c_str = (*env)->GetStringCritical(env,j_str,NULL);
+    if (c_str == NULL)
+    {  
+        return;  
+    }  
+    while(*c_str)   
+    {  
+        *pBuff++ = *c_str++;  
+    }
+    (*env)->ReleaseStringCritical(env,j_str,c_str);
+    strncat(externalStoragePath,"/sdlpal/",strnlen("/sdlpal/",255));
+    return;  
+}
+
+LPCSTR
+UTIL_BasePath(
+   VOID
+)
+{
+    return externalStoragePath;
+}
+
+LPCSTR
+UTIL_SavePath(
+   VOID
+)
+{
+    return externalStoragePath;
+}
+
+BOOL
+UTIL_GetScreenSize(
+   DWORD *pdwScreenWidth,
+   DWORD *pdwScreenHeight
+)
+{
+    *pdwScreenWidth  = 640;
+    *pdwScreenHeight = 400;
+    return TRUE;
+}
+
+BOOL
+UTIL_IsAbsolutePath(
+	LPCSTR  lpszFileName
+)
+{
+	return FALSE;
+}
+
+INT
+UTIL_Platform_Init(
+   int argc,
+   char* argv[]
+)
+{
+   gConfig.fLaunchSetting = FALSE;
+   return 0;
+}
+
+VOID
+UTIL_Platform_Quit(
+   VOID
+)
+{
+}

+ 11 - 2
android/jni/src/pal_config.h

@@ -1,8 +1,8 @@
 #ifndef PAL_CONFIG_H
 # define PAL_CONFIG_H
 
-# define PAL_PREFIX            "/mnt/sdcard/sdlpal/"
-# define PAL_SAVE_PREFIX       "/mnt/sdcard/sdlpal/"
+# define PAL_PREFIX            UTIL_BasePath()
+# define PAL_SAVE_PREFIX       UTIL_SavePath()
 # define PAL_HAS_TOUCH         1
 # define PAL_DEFAULT_WINDOW_WIDTH   320
 # define PAL_DEFAULT_WINDOW_HEIGHT  200
@@ -19,4 +19,13 @@
 # define PAL_CREDIT           "Rikku2000"
 # define PAL_PORTYEAR         "2013"
 
+LPCSTR
+UTIL_BasePath(
+   VOID
+);
+
+LPCSTR
+UTIL_SavePath(
+   VOID
+);
 #endif

+ 13 - 1
android/src/com/codeplex/sdlpal/PalActivity.java

@@ -1,7 +1,19 @@
 package com.codeplex.sdlpal;
 
 import org.libsdl.app.SDLActivity;
+import android.os.*;
+import android.util.*;
 
 public class PalActivity extends SDLActivity {
-
+    public static native void setExternalStorage(String str);  
+    @Override  
+    public void onCreate(Bundle savedInstanceState) {  
+        super.onCreate(savedInstanceState);
+//         setContentView(R.layout.main);
+        String externalStorageState = Environment.getExternalStorageState();
+        if(externalStorageState.equals(Environment.MEDIA_MOUNTED)){
+            setExternalStorage(Environment.getExternalStorageDirectory().getPath());
+            Log.v("sdlpal-debug", "sdcard path " + Environment.getExternalStorageDirectory().getPath());
+        }
+    }
 }