スポンサー リンク
スポンサー リンク
「SATCHのトラッキング・シナリオをSDカードからロードして使う」の続編。

フェルメールの37作品をトラッキングするようにしました。

で、前回はSDカードへ直接放り込むか、QRコードからダウンロードするようにしていましたが、

それでは面倒なのでダウンロード用のアプリを作りました。

PhoneGapを使っています。で、今回は他のアプリを呼び出して画面遷移する必要があったので、

JavaScriptからJavaを呼び出すインターフェースも実装しました。



参考

フェルメールの作品

SATCHのトラッキング・シナリオをSDカードからロードして使う

PhoneGapでネイティブアプリ

TOP

画面遷移

初期画面はこんな感じ。





タップしてダウンロード。







ダウンロード終了後、画面遷移します。


ダウンロードされたデータは、SDカードのdownloadフォルダーに入ります。





別途のトラッキングアプリは、このdownloadフォルダーを見て、必要なファイルがあれば、Scenarioフォルダーに展開(解凍)してロードします。

TOP

ソースコード

PhoneGapの使い方は、PhoneGapでネイティブアプリを参照してください。 主なコードはこんな感じです。

【index.html】

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>A</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8" src="phonegap-1.4.0.js"></script>
<script type="text/javascript" charset="utf-8" src="downloader.js"></script>

<script type="text/javascript" charset="utf-8">
    
    
    var read_filename = "";
    
    // +++ download +++++
    function dl_file(num){
        
        var myRet = confirm("ダウンロードしてよろしいですか?");
        if (myRet == true){
            //
        } else {
            return;
        }
        
        <!-- ダウンロード用のサイトは適当に読み替え -->
        var url = "http://example.com/download/";
        
        var zip_name = "";
        
        var int_num = parseInt(num);
        switch (int_num) {
            case 1:
                zip_name = "Scenario_ChristInTheHouseOfMarthaAndMary";
                break;
            
            case 2:
                zip_name = "Scenario_DianaAndHerCompanions";
                break;
            
            <!-- 途中省略 -->
            
            case 37:
                zip_name = "Scenario_YoungWomanSeatedAtTheVirginals";
                break;
            
        
        }
        
        url = url + zip_name + ".zip";
        
        var text_id = "text" + num;
        
        document.getElementById(text_id).value = "Ready";
        
        window.plugins.downloader.downloadFile(url, {overwrite: true}, 
            function(res) {
                
                var progress = parseJSON(JSON.stringify(res));
                
                    document.getElementById(text_id).value = progress;
                    
                    if (progress == "Complete") {
                        return2scenario_multiread(zip_name);
                    }
                    
                }, function(error) {
                    alert("err" + error);
                }
        );
    
    }
    
    function parseJSON(jsData){
        var data = eval("("+jsData+")");
        var resultData = "";
        
        if (data.progress < 100) {
            resultData = data.progress + "%";
        } else {
            resultData = "Complete";
        }
        
        
        return resultData;
    }
    
    
    //error
    function fail(error) {
        alert(error.code);
    }
    
    function return2scenario_multiread(scenario_name){
        <!-- Javaコードをコール-->
        window.JJ_IFCls.return2scenario_multiread(scenario_name);
        
    }
    
    
</script>

</head>


<body>
<div style="left:30px;top:10px;position:absolute;">
    <BR>
    <textarea id="data_url" style="visibility:hidden" value="">http://foonyan.sakura.ne.jp/wisteriahill/scenario_multiload/download/Scenario_AllegoryOfFaith.zip</textarea>
    
</div>


<div id="downloads" style="left:50px;position:absolute;overflow:scroll">
    <table onClick="dl_file('1')">
    <td><input type="text" id="text1" style="width:70px;border:none" value=""></td><td><img src="img/ChristintheHouseofMarthaandMary.jpg"></td><td>マリアとマルタの家のキリスト<br>Christ in the House of Martha and Mary</td>
    </table>
    <BR>
    <table onClick="dl_file('2')">
    <td><input type="text" id="text2" style="width:70px;border:none" value=""></td><td><img src="img/DianaandHerCompanions.jpg"<td>ディアナとニンフたち <br>Diana and Her Companions</td>
    </table>
    
    
    <!-- 途中省略 -->
    
    
    <BR>
    <table onClick="dl_file('37')">
    <td><input type="text" id="text37" style="width:70px;border:none" value=""><td><img src="img/AYoungWomanSeatedattheVirginals.jpg"></td><td>ヴァージナルの前に座る若い女<br>A Young Woman Seated at the Virginals</td>
    </table>
    
    
</div>


</body>
</html>


Java側

【sampleActivity.java】

//パッケージ名の1111や22222は適当に読み替え
package com.1111.22222;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import com.phonegap.*;
import android.webkit.WebView;
import android.widget.Toast;

public class DownloaderActivity extends DroidGap {
    /** Called when the activity is first created. */
    
    private JJ_IFClass mc;//add
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /*setContentView(R.layout.main);*/
        
    //JavaScript -> Java
        super.init();
        mc = new JJ_IFClass(this, appView);
        appView.addJavascriptInterface(mc, "JJ_IFCls");
        
        super.loadUrl("file:///android_asset/www/index.html");
        
        
    }
    
    //JavaScript -> Java
    public class JJ_IFClass {//add
        private WebView mAppView;
        private DroidGap mGap;
        public JJ_IFClass(DroidGap gap, WebView view)   {
            mAppView = view;
            mGap = gap;
        }

        public void return2scenario_multiread(String scenario_name){
            Toast.makeText(DownloaderActivity.this, scenario_name + "のダウンロード完了", Toast.LENGTH_LONG).show();
            
            
            // インテントのインスタンス生成
        Intent intent = new Intent();
        // パッケージ名, クラス名をセット xxxやyyyは適当に読み替え
        intent.setClassName("com.kddi.satch.xxxxx", "com.kddi.satch.xxxx.yyyyActivity");
        // アプリを起動
        startActivity(intent);
            
        }
    } 
    
    
}


TOP



スポンサー リンク




トップページ| サイトマップ|