投稿日:2010-01-07 Thu
Pです。iアプリからバージョンアップを実行するには
IApplication.lauch(LAUNCH_VERSIONUP, null);
を使用します。
起動直後に実行するものとします。
メソッドを実行すると、「バージョンアップしますか? はい/いいえ」といったダイアログが出て、ユーザーに選択を促します。はいを選択するとiアプリは一端終了し、バージョンアップが完了されると自動で再起動するようになっています。
ただこれだと、アプリが最新かどうかに関わらず起動時に毎回ダイアログが出てしまうためよろしくありません。よって、このメソッドを使用する前にローカルアプリのバージョンが最新かどうかを調べる必要があります。
恐らく色々な方法があるのではないかと思いますが、私は以下の方法で対応しました。
[Versionup.java]
import java.io.InputStream;
import javax.microedition.io.Connector;
import com.nttdocomo.io.HttpConnection;
import com.nttdocomo.ui.Canvas;
import com.nttdocomo.ui.Display;
import com.nttdocomo.ui.Graphics;
import com.nttdocomo.ui.IApplication;
public class Versionup extends IApplication
{
public void start()
{
Display.setCurrent(new MyCanvas(this));
}
}
class MyCanvas extends Canvas
{
private Versionup main;
public MyCanvas(Versionup main)
{
this.main = main;
String result = MyConnect.start();
System.out.println(result);
if (result.indexOf(main.getArgs()[0]) >= 0)
{
//バージョンアップの必要なし
}
else
{
//バージョンアップの必要あり
main.launch(IApplication.LAUNCH_VERSIONUP, null);
}
}
public void paint(Graphics g)
{
g.lock();
g.drawString(main.getArgs()[0], 20, 20);
g.unlock(true);
}
}
class MyConnect
{
public static String start()
{
return connect();
}
private static String connect()
{
String result = "";
HttpConnection conn = null;
InputStream in = null;
try
{
//JAMを直接読み込む
String url = IApplication.getCurrentApp().getSourceURL() + "Versionup.jam";
conn = (HttpConnection)Connector.open(url, Connector.READ, true);
conn.setRequestMethod(HttpConnection.GET);
conn.connect();
in = conn.openInputStream();
byte[] data = new byte[(int)conn.getLength()];
in.read(data);
result = new String(data);
}
catch (Exception e) {}
finally
{
try
{
in.close();
conn.close();
}
catch (Exception e) {}
}
return result;
}
}
ADF設定のUseNetworkのhttpにチェックを入れておきます。
1.ADF設定のAppParamにバージョンを表す任意の値を記述(例:ver1.0.0)
2.http接続でサーバー上のjamファイルを読み込む
→jamファイルをテキストエディタで開いた時のようなStringを取得できる
3.2で取得したStringにAppParamに記述した値が含まれるかどうかString.indexOf()で調べる
→AppParamに記述した内容はIApplication.getArgs()で配列として取得できます。今回はAppParamにひとつしか値を記述していないのでgetArgs()[0]となります。
あまりスマートではないですが、これで完成です。
アプリを更新したい時は、AppParamに前回と違う文字列を記述してビルド後、サーバーにアップします。
注意点としてAppParamには、他のADF設定で使用していないユニークな文字列を設定することでしょうか。
ローカルアプリのLastModifiedあたりが取得できればもうちょい楽なんですけど……
△ PAGE UP