onexit が使えればいいのですが、Android版では無視されます。
つまり、戻るキーでアプリを終了されると強制終了同然の状態です。
そこで、ちょっと改造します。
まず HspActivity.java または HspActivityAdMob.java に以下を追加
更に、いちばん下のほうに以下を追加(末尾の } の1つ手前)
import android.view.KeyEvent;
これで、戻るキーを押すと await 直後の stat に -0x100 が返るようになります。
// 戻るキーを判定 @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (event.getKeyCode()) { case KeyEvent.KEYCODE_BACK: // バックキー nativepoke( 0, -0x100 ); // stat に終了コードを送る return true; } } return super.dispatchKeyEvent(event); }
HSPのコードは以下のようにします。
end の前にデータ保存などの終了処理を書きます。
// 戻るキーのテスト // by 窓月らら #include "hsp3dish.as" setcls 1,$000000 // redraw 0 でクリアする, 黒 *main redraw 0 color 0,255,255 pos 8,8: mes "バックキーのテストです。" redraw 1 c++ await 17-(c\3=0) if stat=-0x100 { gosub *exit } // 判定 goto *main *exit dialog "アプリを終了しますか?",2 if stat!6 { return } // Yes以外なら戻る end // アプリ終了
これで戻るキーで終了されても困らないアプリが作れますね♪
HSP3Dish をはじめてからずっと問題だと思っていたのですが、公式に対応されないので…。
キー検出方法は分かっていたものの、どうHSP側から取得するかがよく分からず
別の不具合を直す過程で nativepoke が使えることに気づいて利用してみました。
暫定的ですが、こんな方法があったよというサンプル。
なお、HSP 3.5β2 ではダイアログにバグがあります(下記参照)。
[HSP3Dish] dialog命令の動作(たぶん不具合)について
http://hsp.tv/play/pforum.php?mode=all&num=72850