1 // -------------------------------------------------------------------------------
2 //
3 //         DXライブラリ        Android専用関数プロトタイプ宣言用ヘッダファイル
4 //
5 //                 Ver 3.22a
6 //
7 // -------------------------------------------------------------------------------
8 module dxlib_d.dxfunctionandroid;
9 
10 
11 version (Android):
12 
13 extern (C):
14 nothrow @nogc:
15 
16 // インクルード ------------------------------------------------------------------
17 /+
18 #include <android/native_activity.h>
19 #include <android/window.h>
20 +/
21 private static import dxlib_d.dxdatatypeandroid;
22 private static import dxlib_d.dxlib;
23 
24 // 定義---------------------------------------------------------------------------
25 
26 // 関数プロトタイプ宣言-----------------------------------------------------------
27 
28 extern (C++, DxLib) {
29 	/**
30 	 * アプリで使用している NativeActivity を取得する
31 	 */
32 	extern const (ANativeActivity)* GetNativeActivity();
33 
34 	/**
35 	 * Android の APIレベルを取得する
36 	 */
37 	extern int GetAndroidAPILevel();
38 
39 	/**
40 	 * ソフトのデータ保存用のディレクトリパスを取得する
41 	 */
42 	extern int GetInternalDataPath(dxlib_d.dxdatatypeandroid.TCHAR* PathBuffer, int PathBufferBytes);
43 
44 	/**
45 	 * ソフトの外部データ保存用のディレクトリパスを取得する
46 	 *      PathBuffer = パスを保存するバッファ
47 	 *      PathBufferBytes = パスを保存するバッファのサイズ( 単位:バイト )
48 	 *      PathIndex = 外部データ保存用のディレクトリパスの番号( 複数個ある場合があるので )
49 	 *      IsRemovableFlag = PathIndex で指定したパスが取り外し可能なデバイスかどうかを保存する int型変数のアドレス( 格納された値 TRUE:取り外し可能( SDカード等 )  FALSE:取り外し不可能( 内蔵ストレージ等 ) )
50 	 */
51 	extern int GetExternalDataPath(dxlib_d.dxdatatypeandroid.TCHAR* PathBuffer, int PathBufferBytes, int PathIndex = 0, int* IsRemovableFlag = null);
52 
53 	/**
54 	 * ソフトの外部データ保存用のディレクトリパスの数を取得する
55 	 */
56 	extern int GetExternalDataPathNum();
57 
58 	/**
59 	 * 端末に設定されている言語を取得する
60 	 *
61 	 * Returns: -1:エラー 0以上:言語名文字列の格納に必要なバイト数
62 	 */
63 	extern int GetLanguage(dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferSize);
64 
65 	/**
66 	 * 端末に設定されている国を取得する
67 	 *
68 	 * Returns: -1:エラー 0以上:国名文字列の格納に必要なバイト数
69 	 */
70 	extern int GetCountry(dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferSize);
71 
72 	/**
73 	 * メモリ情報を取得する
74 	 *      TotalMemory = 総メモリ容量を代入する変数( 単位:byte )、( 情報の取得が不要な場合は null を渡す )
75 	 *      FreeMrmoyy = 空きメモリ容量を代入する変数( 単位:byte )、( 情報の取得が不要な場合は null を渡す )
76 	 *      UseMemory = アプリが使用しているメモリ容量を代入する変数( 単位:byte )、( 情報の取得が不要な場合は null を渡す )、( 使用メモリ量の取得は非常に処理負荷が高いので、不要な場合は必ず null を渡すようにしてください )
77 	 */
78 	extern int GetAndroidMemoryInfo(dxlib_d.dxdatatypeandroid.LONGLONG* TotalMemory, dxlib_d.dxdatatypeandroid.LONGLONG* FreeMemory, dxlib_d.dxdatatypeandroid.LONGLONG* UseMemory);
79 
80 	/**
81 	 * ディスプレイの解像度を取得する
82 	 */
83 	extern int GetAndroidDisplayResolution(int* SizeX, int* SizeY);
84 
85 	/**
86 	 * ディスプレイを本体設定に従って時間経過でスリープ状態になることを許可するかどうかを設定する
87 	 *
88 	 * Params:
89 	 *      Flag = TRUE:スリープ状態になることを許可しない  FALSE:スリープ状態を許可する( デフォルト )
90 	 */
91 	extern int SetKeepScreenOnFlag(int Flag);
92 
93 	/**
94 	 * 加速度センサーのベクトル値を取得する
95 	 */
96 	extern dxlib_d.dxlib.VECTOR GetAccelerometerVector();
97 
98 	/**
99 	 * センサーから得られる方角を取得する
100 	 * 縦持ち( 地面に対して端末を垂直に持った状態 )の場合に正しく値が取得できます
101 	 * 戻り値の x:方角( 単位:ラジアン  0.0f:北  π/2.0f:東  -π/2.0f:西  -π or π:南 )
102 	 * 戻り値の y:前後の傾斜( 単位:ラジアン  0.0f:端末が縦持ちで垂直( 逆さまで垂直の場合含む )の状態  π/2.0f:前方方向に90度倒した状態( 画面が空を向いている状態 )  -π/2.0f:後方方向に90度倒した状態( 画面が地面を向いている状態 ) )
103 	 * 戻り値の z:左右の傾斜( 単位:ラジアン  0.0f:端末が縦持ちで垂直の状態  π/2.0f:右方向に90度倒した状態  -π/2.0f:左方向に90度倒した状態  -π or π:端末が上下さかさまで垂直の状態 )
104 	 */
105 	extern dxlib_d.dxlib.VECTOR GetOrientationVector();
106 
107 	/**
108 	 * センサーのベクトル値を取得する
109 	 *
110 	 * Params:
111 	 *      SensorType = DX_ANDROID_SENSOR_ACCELEROMETER など
112 	 */
113 	extern dxlib_d.dxlib.VECTOR GetAndroidSensorVector(int SensorType);
114 
115 	/**
116 	 * センサーが有効かどうかを取得する
117 	 *
118 	 * Params:
119 	 *      SensorType = DX_ANDROID_SENSOR_ACCELEROMETER など
120 	 *
121 	 * Returns: TRUE:有効 FALSE:無効
122 	 */
123 	extern int CheckAndroidSensor(int SensorType);
124 
125 	// 振動機能関係( 使用するには AndroidManifest.xml に <uses-permission android:name="android.permission.VIBRATE" /> を書き加える必要があります )
126 
127 	/**
128 	 * 振動機能があるか取得する
129 	 *
130 	 * Returns: TRUE:振動機能あり  FALSE:振動機能なし
131 	 */
132 	extern int Vibrator_hasVibrator();
133 
134 	/**
135 	 * 振動機能に振幅制御( 振動の強さ制御 )機能があるかどうかを取得する
136 	 *
137 	 * Returns: TRUE:振幅制御ができる  FALSE:振幅制御はできない
138 	 */
139 	extern int Vibrator_hasAmplitudeControl();
140 
141 	/**
142 	 * 振動を開始する
143 	 *      Milliseconds = 振動させる時間( 単位:ミリ秒 )
144 	 *      Amplitude = 振動の強さ( 0( 振動なし ) ~ 255( 最大振幅 ) )、振動の強さの制御に対応していない場合は無視されます
145 	 */
146 	extern int Vibrator_vibrate(int Milliseconds, int Amplitude);
147 
148 	/**
149 	 * 振動パターン付きの振動を開始する
150 	 *      Timings = 振動パターンを定義する時間( 単位:ミリ秒 )の配列( Timings[0]:振動を開始するまでの待ち時間、Timings[1]:振動し続ける時間、Timings[2]:振動を停止している時間、Timings[3]:振動し続ける時間、Timings[4]:振動を停止している時間  以下繰り返し )
151 	 *      TimingsLength = Timings の配列の長さ
152 	 *      Repeat = 振動パターンを繰り返す場合の配列の要素番号( 例 0:最初から繰り返し  1:配列要素の1から繰り返し )、-1 で繰り返し無し
153 	 */
154 	extern int Vibrator_vibrate_with_OnOffTimings(int* Timings, int TimingsLength, int Repeat);
155 
156 	/**
157 	 * 振幅制御付き( 振動の強さ指定付き )振動を開始する( Vibrator_hasAmplitudeControl の戻り値が TRUE の場合のみ使用可能 )
158 	 *      Timings = 振動の強さを変更するタイミング( 単位:ミリ秒 )の配列
159 	 *      Amplitudes = 振動の強さ( 0( 振動なし ) ~ 255( 最大振幅 ) )の配列
160 	 *      ArrayLength = Timings と Amplitudes の配列の長さ( 配列の長さはどちらも同じである必要があります )
161 	 *      Repeat = Timings と Amplitudes で示される振動パターンを繰り返す場合の配列の要素番号( 例 0:最初から繰り返し  1:配列要素の1から繰り返し )、-1 で繰り返し無し
162 	 */
163 	extern int Vibrator_vibrate_with_Amplitudes(int* Timings, int* Amplitudes, int ArrayLength, int Repeat);
164 
165 	/**
166 	 * 振動を中断する
167 	 */
168 	extern int Vibrator_cancel();
169 
170 	/**
171 	 * 曜日や週に関する情報を取得する
172 	 *      DayOfWeek = 曜日( 1:日曜日 2:月曜日 3:火曜日 4:水曜日 5:木曜日 6:金曜日 7:土曜日 )
173 	 *      WeekOfMonth = 今日が今月の何週目なのかの値( 1:1週目  2:2週目  3:3週目  4:4週目  5:5週目 )
174 	 *      DayOfWeekInMonth = 今日の曜日が今月何回目に当たるか、の値( 1:1回目  2:2回目  3:3回目  4:4回目 ... )
175 	 */
176 	extern int GetAndroidWeekInfo(int* DayOfWeek, int* WeekOfMonth, int* DayOfWeekInMonth);
177 
178 	/**
179 	 * res/values/strings.xml の string リソースを取得する
180 	 *      ValueName = string 情報名
181 	 *      StringBuffer = ValueName が示す文字列を格納するバッファの先頭アドレス
182 	 *      StringBufferBytes = StringBuffer のサイズ( 単位:バイト )
183 	 *
184 	 * Returns: -1:指定の string 情報は無かった  -1以外:StringBuffer に必要なバッファのサイズ( 単位:バイト )
185 	 */
186 	extern int GetAndroidResource_Strings_String(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName, dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferBytes);
187 	extern int GetAndroidResource_Strings_StringWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName, size_t ValueNameLength, dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferBytes);
188 
189 	/**
190 	 * AndroidManifest.xml に書かれた <meta-data android:name="test0" android:value="abcde" /> などのメタデータの文字列を取得する
191 	 *      ValueName = メタデータ名
192 	 *      StringBuffer = ValueName が示す文字列を格納するバッファの先頭アドレス
193 	 *      StringBufferBytes = StringBuffer のサイズ( 単位:バイト )
194 	 *
195 	 * Returns: -1:指定のメタデータは無かった  -1以外:StringBuffer に必要なバッファのサイズ( 単位:バイト )
196 	 */
197 	extern int GetAndroidMetaData_String(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName, dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferBytes);
198 	extern int GetAndroidMetaData_StringWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName, size_t ValueNameLength, dxlib_d.dxdatatypeandroid.TCHAR* StringBuffer, int StringBufferBytes);
199 
200 	/*
201 	 * AndroidManifest.xml に書かれた <meta-data android:name="bool0" android:value="true" /> などの Boolean型のメタデータを取得する
202 	 * ValueName:メタデータ名
203 	 * Returns: -1:指定のメタデータは無かった  TRUE:指定のメタデータは true だった   FALSE:指定のメタデータは false だった
204 	 */
205 	//extern int GetAndroidMetaData_Boolean(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName);
206 	//extern int GetAndroidMetaData_BooleanWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* ValueName, size_t ValueNameLength);
207 
208 	/**
209 	 * 通知を発行する
210 	 *      Title = タイトル
211 	 *      SubTitle = サブタイトル
212 	 *      Icon = アイコン ( -1 でデフォルトのアイコン )
213 	 *      ShowWhen = 通知時刻を表示するか ( TRUE:表示する  FALSE:表示しない )
214 	 *      AutoCancel = 通知がタップされたら通知を削除するか ( TRUE:タップされたら通知を削除する   FALSE:Cancel されるまで通知を削除しない )
215 	 *      NotifyID = 通知ID
216 	 *      Vibrate = 振動パターン用の int型配列( 時間の単位はミリ秒 )、null の場合は振動なし( Vibrate[0]:振動停止時間  Vibrate[1]:振動時間  Vibrate[2]:振動停止時間  Vibrate[3]:振動時間  ... 以下繰り返し )
217 	 *      VibrateLength = Vibrate 配列の要素数
218 	 *      LightColor = 通知時のライトの色( GetColor で取得 )、LightOnTime か LightOffTime が 0 の場合はライトの点灯無し
219 	 *      LightOnTime = ライトの点灯時間( 単位:ミリ秒 )
220 	 *      LightOffTime = ライトの消灯時間( 単位:ミリ秒 )
221 	extern int AndroidNotification(const (dxlib_d.dxdatatypeandroid.TCHAR)* Title, const (dxlib_d.dxdatatypeandroid.TCHAR)* SubTitle, int Icon = -1, int ShowWhen = dxlib_d.dxdatatypeandroid.TRUE, int AutoCancel = dxlib_d.dxdatatypeandroid.TRUE, int NotifyId = 0, int* Vibrate = null, int VibrateLength = 0, uint LightColor = 0, int LightOnTime = 0, int LightOffTime = 0);
222 	extern int AndroidNotificationWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* Title, size_t TitleLength, const (dxlib_d.dxdatatypeandroid.TCHAR)* SubTitle, size_t SubTitleLength, int Icon = -1, int ShowWhen = dxlib_d.dxdatatypeandroid.TRUE, int AutoCancel = dxlib_d.dxdatatypeandroid.TRUE, int NotifyId = 0, int* Vibrate = null, int VibrateLength = 0, uint LightColor = 0, int LightOnTime = 0, int LightOffTime = 0);
223 
224 	/**
225 	 * 通知をキャンセルする
226 	 *      NotifyID = 通知ID
227 	 */
228 	extern int AndroidNotificationCancel(int NotifyId);
229 
230 	/**
231 	 * 全ての通知をキャンセルする
232 	 */
233 	extern int AndroidNotificationCancelAll();
234 
235 	/**
236 	 * 指定の URL をブラウザで開く( BrowserAppPackageName か BrowserAppClassName が null の場合は標準ブラウザで開く )
237 	 *      URL = 開くURL
238 	 *      BrowserAppPackageName = ブラウザのパッケージ名( null で標準ブラウザ )
239 	 *      BrowserAppClassName = ブラウザのクラス名( null で標準ブラウザ )
240 	 */
241 	extern int AndroidJumpURL(const (dxlib_d.dxdatatypeandroid.TCHAR)* URL, const (dxlib_d.dxdatatypeandroid.TCHAR)* BrowserAppPackageName = null, const (dxlib_d.dxdatatypeandroid.TCHAR)* BrowserAppClassName = null);
242 	extern int AndroidJumpURLWithStrLen(const (dxlib_d.dxdatatypeandroid.TCHAR)* URL, size_t URLLength, const (dxlib_d.dxdatatypeandroid.TCHAR)* BrowserAppPackageName = null, size_t BrowserAppPackageNameLength = 0, const (dxlib_d.dxdatatypeandroid.TCHAR)* BrowserAppClassName = null, size_t BrowserAppClassNameLength = 0);
243 
244 	/**
245 	 * Wifi の電波強度を取得する
246 	 * ( 使用するには AndroidManifest.xml に <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> を書き加える必要があります )
247 	 *
248 	 * Returns: 電波の強度 0 ~ 100
249 	 */
250 	extern int GetWifiSignalLevel();
251 
252 	/**
253 	 * アプリが非アクティブになった際に呼ばれるコールバック関数を登録する
254 	 */
255 	extern int SetAndroidLostFocusCallbackFunction(void function(void* Data) Callback, void* CallbackData);
256 
257 	/**
258 	 * アプリがアクティブになった際に呼ばれるコールバック関数を登録する
259 	 */
260 	extern int SetAndroidGainedFocusCallbackFunction(void function(void* Data) Callback, void* CallbackData);
261 
262 	/**
263 	 * アプリを終了した際に、プロセスを完全に終了するかを設定する
264 	 *
265 	 * Params:
266 	 *      KillProcessFlag = TRUE:アプリを終了したら、プロセスを完全に終了する  FALSE:アプリを終了しても、プロセスは完全には終了されない( デフォルト )
267 	 */
268 	extern int SetUseAndroidKillProcessFlag(int KillProcessFlag);
269 
270 	/**
271 	 * OpenGL 関係の情報を取得する
272 	 *
273 	 * Params:
274 	 *      Version = ?
275 	 *      Renderer = ?
276 	 *      Vendor = ?
277 	 *      ExtensionNames = ?
278 	 *      Shader_Language_Version = ?
279 	 *      Shader_Max_Vertex_Attribs = GL_MAX_VERTEX_ATTRIBS
280 	 *      Shader_Max_Vertex_Uniform_Vectors = GL_MAX_VERTEX_UNIFORM_VECTORS
281 	 *      Shader_Max_Varying_Vectors = GL_MAX_VARYING_VECTORS
282 	 *      Shader_Max_Combined_Texture_Image_Units = GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
283 	 *      Shader_Max_Vertex_Texture_Image_Units = GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
284 	 *      Shader_Max_Texture_Image_Units = GL_MAX_TEXTURE_IMAGE_UNITS
285 	 *      Shader_Max_Fragment_Uniform_Vectors = GL_MAX_FRAGMENT_UNIFORM_VECTORS
286 	 */
287 	extern int GetOpenGLInfo(dxlib_d.dxdatatypeandroid.TCHAR** Version = null, dxlib_d.dxdatatypeandroid.TCHAR** Renderer = null, dxlib_d.dxdatatypeandroid.TCHAR** Vendor = null, dxlib_d.dxdatatypeandroid.TCHAR*** ExtensionNames = null, dxlib_d.dxdatatypeandroid.TCHAR** Shader_Language_Version = null, int* Shader_Max_Vertex_Attribs = null, int* Shader_Max_Vertex_Uniform_Vectors = null, int* Shader_Max_Varying_Vectors = null, int* Shader_Max_Combined_Texture_Image_Units = null, int* Shader_Max_Vertex_Texture_Image_Units = null, int* Shader_Max_Texture_Image_Units = null, int* Shader_Max_Fragment_Uniform_Vectors = null);
288 
289 	/**
290 	 * グラフィックハンドルのテクスチャオブジェクトを取得する
291 	 */
292 	extern uint GetGraphOpenGLESTextureObject(int GrHandle);
293 
294 	/**
295 	 * DXライブラリが行った OpenGL ES の設定を再度行う( 特殊用途 )
296 	 */
297 	extern int RefreshDxLibOpenGLESSetting();
298 
299 	/**
300 	 * イコライザー機能を使用するかどうかを設定する( DxLib_Init 呼び出し前のみ実行可能 )
301 	 * UseFlag  TRUE:使用する  FALSE:使用しない
302 	 */
303 	extern int SetUseEqualizer(int UseFlag);
304 
305 	// イコライザー関係関数
306 
307 	/**
308 	 * イコライザーの与えられた周波数に最も影響を与える周波数帯域を取得します
309 	 *
310 	 * Returns: -1:エラー  0以上:周波数帯域インデックス
311 	 */
312 	extern int SearchEqualizerBandIndex(int Frequency);
313 
314 	/**
315 	 * イコライザーに指定できる周波数帯域の数を取得する
316 	 */
317 	extern int GetEqualizerBandNum();
318 
319 	/**
320 	 * 与えられたイコライザーの周波数帯域を与えられたゲイン値に設定します
321 	 */
322 	extern int SetEqualizerBandLevel(int BandIndex, int Level);
323 
324 	/**
325 	 * イコライザーの指定された周波数帯域のゲイン値を取得します
326 	 */
327 	extern int GetEqualizerBandLevel(int BandIndex);
328 
329 	/**
330 	 * イコライザーの指定された周波数帯域の周波数範囲を取得します
331 	 *
332 	 * Params:
333 	 *      BandIndex = ?
334 	 *      pMin = 最小周波数( 単位:ヘルツ )
335 	 *      pMax = 最大周波数( 単位:ヘルツ )
336 	 */
337 	extern int GetEqualizerBandFreqRange(int BandIndex, int* pMin, int* pMax);
338 
339 	/**
340 	 * イコライザーの指定された周波数帯域の中心周波数を取得します
341 	 *
342 	 * Returns: 中心周波数( 単位:ヘルツ )
343 	 */
344 	extern int GetEqualizerBandCenterFreq(int BandIndex);
345 
346 	/**
347 	 * イコライザーの現在のプリセットを取得します
348 	 *
349 	 * Returns: プリセット番号
350 	 */
351 	extern int GetEqualizerCurrentPreset();
352 
353 	/**
354 	 * イコライザーのプリセットの数を取得します
355 	 *
356 	 * Returns: プリセットの数
357 	 */
358 	extern int GetEqualizerPresetNum();
359 
360 	/**
361 	 * イコライザーのプリセット名を取得します
362 	 *
363 	 * Returns: プリセット名の文字列が格納されたメモリ領域の先頭アドレス
364 	 */
365 	extern const (dxlib_d.dxdatatypeandroid.TCHAR)* GetEqualizerPresetName(int PresetIndex);
366 
367 	/**
368 	 * 指定したプリセットに従ってイコライザーを設定します
369 	 */
370 	extern int SetUseEqualizerPreset(int PresetIndex);
371 }