カメラを使って静止画データの取得(S!アプリ)StorageConnection抜き
この方法で実現可能なこと
- ここに書かれていること
プラス
- JarファイルにStorageConnectionを含めない
MIDP | javax.microedition.io.Connector javax.microedition.io.InputConnection |
JSCL-1.2.X以降またはMEXA1.0以降 | com.j_phone.io.CameraConnection |
サンプルソース
CameraConnection cc = (CameraConnection)Connector.open("camera:"); cc.capture(); String filename = cc.getFileName(); cc.close(); InputConnection storageConnection = (InputConnection)Connector.open("file://" + filename); InputStream is = storageConnection.openInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buff=new byte[1024]; int size; while ((size=is.read(buff))!=-1) { baos.write(buff,0,size); } baos.flush(); baos.close(); is.close(); storageConnection.close(); byte[] data = baos.toByteArray();
JADファイル
カメラ機能とファイル機能へのアクセスは、セキュリティに引っかかるので「MIDlet-Permissions」の記載が必要
MIDlet-Version: 1.0 MicroEdition-Profile: MIDP-2.0 MicroEdition-Configuration: CLDC-1.1 MIDlet-Permissions: com.j_phone.io.Connector.CameraConnection.capture,com.j_phone.io.Connector.StorageConnection.read MIDxlet-API: JSCL-1.2.2
結果
byte[]のdataに撮影画像のバイナリが格納される
解説
こことの違いは「Connector.open("file://" + filename)」で得られるオブジェクトにアクセスする際にcom.j_phone.io.StorageConnectionのスーパーインタフェイスにあたるjavax.microedition.io.InputConnectionインタフェースを使用するという点。
カメラで撮影した画像を取得する場合、該当ファイルのInputStreamがひらければ事足りるので、StorageConnectionまで使用する必要がない。
この方法ならば、Jarファイル内を見た限りではStorageConnectionを呼び出した事がわからないため、ネットワーク機能をあわせて使いたい場合などは有効な手段となる。
ただ、S!アプリのダウンロード時に、端末内データへのアクセス許可を設定する必要があるため、JADファイルには「com.j_phone.io.Connector.StorageConnection.read」の記述が必要(911Tで検証)。