1 // -------------------------------------------------------------------------------
2 //
3 //         DXライブラリ        Android専用関数プロトタイプ宣言用ヘッダファイル
4 //
5 //                 Ver 3.22c
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.DxLib;
22 public import dxlib_d.DxDataType;
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.DxDataType.TCHAR* PathBuffer, int PathBufferBytes);
43 
44 	/**
45 	 * ソフトの外部データ保存用のディレクトリパスを取得する
46 	 *      PathBuffer = パスを保存するバッファ
47 	 *      PathBufferBytes = パスを保存するバッファのサイズ(単位:バイト)
48 	 *      PathIndex = 外部データ保存用のディレクトリパスの番号(複数個ある場合があるので)
49 	 *      IsRemovableFlag = PathIndexで指定したパスが取り外し可能なデバイスかどうかを保存するint型変数のアドレス(格納された値 dxlib_d.DxDataType.TRUE:取り外し可能(SDカード等)  dxlib_d.DxDataType.FALSE:取り外し不可能(内蔵ストレージ等))
50 	 */
51 	extern int GetExternalDataPath(dxlib_d.DxDataType.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.DxDataType.TCHAR* StringBuffer, int StringBufferSize);
64 
65 	/**
66 	 * 端末に設定されている国を取得する
67 	 *
68 	 * Returns: -1:エラー 0以上:国名文字列の格納に必要なバイト数
69 	 */
70 	extern int GetCountry(dxlib_d.DxDataType.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.DxDataType.LONGLONG* TotalMemory, dxlib_d.DxDataType.LONGLONG* FreeMemory, dxlib_d.DxDataType.LONGLONG* UseMemory);
79 
80 	/**
81 	 * ディスプレイの解像度を取得する
82 	 */
83 	extern int GetAndroidDisplayResolution(int* SizeX, int* SizeY);
84 
85 	/**
86 	 * ディスプレイを本体設定に従って時間経過でスリープ状態になることを許可するかどうかを設定する
87 	 *
88 	 * Params:
89 	 *      Flag = dxlib_d.DxDataType.TRUE:スリープ状態になることを許可しない  dxlib_d.DxDataType.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: dxlib_d.DxDataType.TRUE:有効 dxlib_d.DxDataType.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: dxlib_d.DxDataType.TRUE:振動機能あり  dxlib_d.DxDataType.FALSE:振動機能なし
131 	 */
132 	extern int Vibrator_hasVibrator();
133 
134 	/**
135 	 * 振動機能に振幅制御(振動の強さ制御)機能があるかどうかを取得する
136 	 *
137 	 * Returns: dxlib_d.DxDataType.TRUE:振幅制御ができる  dxlib_d.DxDataType.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の戻り値がdxlib_d.DxDataType.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.DxDataType.TCHAR)* ValueName, dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferBytes);
187 	extern int GetAndroidResource_Strings_StringWithStrLen(const (dxlib_d.DxDataType.TCHAR)* ValueName, size_t ValueNameLength, dxlib_d.DxDataType.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.DxDataType.TCHAR)* ValueName, dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferBytes);
198 	extern int GetAndroidMetaData_StringWithStrLen(const (dxlib_d.DxDataType.TCHAR)* ValueName, size_t ValueNameLength, dxlib_d.DxDataType.TCHAR* StringBuffer, int StringBufferBytes);
199 
200 	/*
201 	 * AndroidManifest.xmlに書かれた<meta-data android:name="bool0" android:value="true" />などのBoolean型のメタデータを取得する
202 	 * ValueName:メタデータ名
203 	 * Returns: -1:指定のメタデータは無かった  dxlib_d.DxDataType.TRUE:指定のメタデータはtrueだった   dxlib_d.DxDataType.FALSE:指定のメタデータはfalseだった
204 	 */
205 	//extern int GetAndroidMetaData_Boolean(const (dxlib_d.DxDataType.TCHAR)* ValueName);
206 	//extern int GetAndroidMetaData_BooleanWithStrLen(const (dxlib_d.DxDataType.TCHAR)* ValueName, size_t ValueNameLength);
207 
208 	/**
209 	 * 通知を発行する
210 	 *      Title = タイトル
211 	 *      SubTitle = サブタイトル
212 	 *      Icon = アイコン(-1でデフォルトのアイコン)
213 	 *      ShowWhen = 通知時刻を表示するか(dxlib_d.DxDataType.TRUE:表示する  dxlib_d.DxDataType.FALSE:表示しない)
214 	 *      AutoCancel = 通知がタップされたら通知を削除するか(dxlib_d.DxDataType.TRUE:タップされたら通知を削除する   dxlib_d.DxDataType.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.DxDataType.TCHAR)* Title, const (dxlib_d.DxDataType.TCHAR)* SubTitle, int Icon = -1, int ShowWhen = dxlib_d.DxDataType.TRUE, int AutoCancel = dxlib_d.DxDataType.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.DxDataType.TCHAR)* Title, size_t TitleLength, const (dxlib_d.DxDataType.TCHAR)* SubTitle, size_t SubTitleLength, int Icon = -1, int ShowWhen = dxlib_d.DxDataType.TRUE, int AutoCancel = dxlib_d.DxDataType.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.DxDataType.TCHAR)* URL, const (dxlib_d.DxDataType.TCHAR)* BrowserAppPackageName = null, const (dxlib_d.DxDataType.TCHAR)* BrowserAppClassName = null);
242 	extern int AndroidJumpURLWithStrLen(const (dxlib_d.DxDataType.TCHAR)* URL, size_t URLLength, const (dxlib_d.DxDataType.TCHAR)* BrowserAppPackageName = null, size_t BrowserAppPackageNameLength = 0, const (dxlib_d.DxDataType.TCHAR)* BrowserAppClassName = null, size_t BrowserAppClassNameLength = 0);
243 
244 	/**
245 	 * Wifiの電波強度を取得する(使用するにはAndroidManifest.xmlに<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />を書き加える必要があります)
246 	 *
247 	 * Returns: 電波の強度0~100
248 	 */
249 	extern int GetWifiSignalLevel();
250 
251 	/**
252 	 * アプリが非アクティブになった際に呼ばれるコールバック関数を登録する
253 	 */
254 	extern int SetAndroidLostFocusCallbackFunction(void function(void* Data) Callback, void* CallbackData);
255 
256 	/**
257 	 * アプリがアクティブになった際に呼ばれるコールバック関数を登録する
258 	 */
259 	extern int SetAndroidGainedFocusCallbackFunction(void function(void* Data) Callback, void* CallbackData);
260 
261 	/**
262 	 * アプリを終了した際に、プロセスを完全に終了するかを設定する
263 	 *
264 	 * Params:
265 	 *      KillProcessFlag = dxlib_d.DxDataType.TRUE:アプリを終了したら、プロセスを完全に終了する  dxlib_d.DxDataType.FALSE:アプリを終了しても、プロセスは完全には終了されない(デフォルト)
266 	 */
267 	extern int SetUseAndroidKillProcessFlag(int KillProcessFlag);
268 
269 	/**
270 	 * OpenGL 関係の情報を取得する
271 	 *
272 	 * Params:
273 	 *      Version = ?
274 	 *      Renderer = ?
275 	 *      Vendor = ?
276 	 *      ExtensionNames = ?
277 	 *      Shader_Language_Version = ?
278 	 *      Shader_Max_Vertex_Attribs = GL_MAX_VERTEX_ATTRIBS
279 	 *      Shader_Max_Vertex_Uniform_Vectors = GL_MAX_VERTEX_UNIFORM_VECTORS
280 	 *      Shader_Max_Varying_Vectors = GL_MAX_VARYING_VECTORS
281 	 *      Shader_Max_Combined_Texture_Image_Units = GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
282 	 *      Shader_Max_Vertex_Texture_Image_Units = GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
283 	 *      Shader_Max_Texture_Image_Units = GL_MAX_TEXTURE_IMAGE_UNITS
284 	 *      Shader_Max_Fragment_Uniform_Vectors = GL_MAX_FRAGMENT_UNIFORM_VECTORS
285 	 */
286 	extern int GetOpenGLInfo(dxlib_d.DxDataType.TCHAR** Version = null, dxlib_d.DxDataType.TCHAR** Renderer = null, dxlib_d.DxDataType.TCHAR** Vendor = null, dxlib_d.DxDataType.TCHAR*** ExtensionNames = null, dxlib_d.DxDataType.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);
287 
288 	/**
289 	 * グラフィックハンドルのテクスチャオブジェクトを取得する
290 	 */
291 	extern uint GetGraphOpenGLESTextureObject(int GrHandle);
292 
293 	/**
294 	 * DXライブラリが行ったOpenGL ESの設定を再度行う(特殊用途)
295 	 */
296 	extern int RefreshDxLibOpenGLESSetting();
297 
298 	/**
299 	 * イコライザー機能を使用するかどうかを設定する(DxLib_Init呼び出し前のみ実行可能)
300 	 * UseFlag  dxlib_d.DxDataType.TRUE:使用する  dxlib_d.DxDataType.FALSE:使用しない
301 	 */
302 	extern int SetUseEqualizer(int UseFlag);
303 
304 	// イコライザー関係関数
305 
306 	/**
307 	 * イコライザーの与えられた周波数に最も影響を与える周波数帯域を取得します
308 	 *
309 	 * Returns: -1:エラー  0以上:周波数帯域インデックス
310 	 */
311 	extern int SearchEqualizerBandIndex(int Frequency);
312 
313 	/**
314 	 * イコライザーに指定できる周波数帯域の数を取得する
315 	 */
316 	extern int GetEqualizerBandNum();
317 
318 	/**
319 	 * 与えられたイコライザーの周波数帯域を与えられたゲイン値に設定します
320 	 */
321 	extern int SetEqualizerBandLevel(int BandIndex, int Level);
322 
323 	/**
324 	 * イコライザーの指定された周波数帯域のゲイン値を取得します
325 	 */
326 	extern int GetEqualizerBandLevel(int BandIndex);
327 
328 	/**
329 	 * イコライザーの指定された周波数帯域の周波数範囲を取得します
330 	 *
331 	 * Params:
332 	 *      BandIndex = ?
333 	 *      pMin = 最小周波数(単位:ヘルツ)
334 	 *      pMax = 最大周波数(単位:ヘルツ)
335 	 */
336 	extern int GetEqualizerBandFreqRange(int BandIndex, int* pMin, int* pMax);
337 
338 	/**
339 	 * イコライザーの指定された周波数帯域の中心周波数を取得します
340 	 *
341 	 * Returns: 中心周波数(単位:ヘルツ)
342 	 */
343 	extern int GetEqualizerBandCenterFreq(int BandIndex);
344 
345 	/**
346 	 * イコライザーの現在のプリセットを取得します
347 	 *
348 	 * Returns: プリセット番号
349 	 */
350 	extern int GetEqualizerCurrentPreset();
351 
352 	/**
353 	 * イコライザーのプリセットの数を取得します
354 	 *
355 	 * Returns: プリセットの数
356 	 */
357 	extern int GetEqualizerPresetNum();
358 
359 	/**
360 	 * イコライザーのプリセット名を取得します
361 	 *
362 	 * Returns: プリセット名の文字列が格納されたメモリ領域の先頭アドレス
363 	 */
364 	extern const (dxlib_d.DxDataType.TCHAR)* GetEqualizerPresetName(int PresetIndex);
365 
366 	/**
367 	 * 指定したプリセットに従ってイコライザーを設定します
368 	 */
369 	extern int SetUseEqualizerPreset(int PresetIndex);
370 }