[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その12)

その11は、Pushに関する情報でした。[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その11)

その11は、BBMに関する情報です。

BlackBerry Java to BlackBerry 10 Cascades Porting Series – Part 12: BBM
(Inside BlackBerry Developer Blog)

Most features of the BlackBerry Messenger Social Platform on BlackBerry Java are also available on BlackBerry 10. The following chart summarizes the feature sets:

BlackBerry JavaベースとBlackBerry 10のBlackBerry Messenger プラットフォームでは多くの機能がサポートされています。
サポートしている機能の要約が以下の表にまとめられています。

bbm1

ChannelsやSessionsは前回のBlackBerry Jamで発表されましたが、BlackBerry 10でのサポートはまだのようです。
BBM Chatの機能は呼出しのフレームワークでサポートしているようです。

BlackBerry 10でも多くの機能サポートされているので、アプリケーションからBBMの機能を利用することは可能になっています。

BBMRegistrationBBMInviteToDownloadBBMQtProfileBoxSamplebbmprofilebox といったサンプルコードが公開されているので参考になると思います。

[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その11)

その10は、NFCとBluetoothに関する情報でした。[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その10)

その11は、Pushに関する情報です。

BlackBerry Java to BlackBerry 10 Cascades Porting Series – Part 11: Push (Inside BlackBerry Developer Blog)

Pushはリアルタイムでデータを方法で、BlackBerryではメジャーな方法です。
Pushを利用するには、デバイスでのPushの登録とサーバサイドでの登録が必要となります。

BlackBerry 10でPushを利用するには、BlackBerry 7とほぼ同じ方法で行えるようです。

Pushサービスのoverviewは http://developer.blackberry.com/java/documentation/push_service_overview.html にあります。

push_service_sdk_arch_diagram_jan_03

以下のリンクにコーディングの詳しい情報が記載されています。

https://developer.blackberry.com/cascades/documentation/device_platform/invocation/receiving_invocation.html

https://developer.blackberry.com/cascades/documentation/device_comm/push/cs_receiving_a_push_message.html

[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その10)

その9は、位置情報に関する情報でした。[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その9)

その10は、NFCとBluetoothに関する情報です。

BlackBerry Java to BlackBerry 10 Cascades Porting Series – Part 10: NFC and Bluetooth (Inside BlackBerry Developer Blog)

Bluetooth

Bluetoothは通信するデバイスによってサポートするプロファイルが異なります。今回は通信に関する部分です。

Serial Port Profile
BlackBerry 10でSerial Port Profile [SPP] を使い通信するさいのコードは以下のようです。

サーバへSPP接続をオープンします。

int bt_spp_open(char *addr, char *service_uuid, bool nonblock);

SPPサーバを作成して、Callbackを設定します。

int bt_spp_open_server(char *service_name, char *service_uuid, bool nonblock, void (*callback)(long param,int fd), long param);

サンプルコードは ここ です。

Object Sharing
オブジェクトのシェアのコードです。この場合は、/tmpにあるtest.pngをシェアしています。

  InvokeManager * im = new InvokeManager(this);

  InvokeRequest request;
  request.setAction("bb.action.SHARE");
  request.setTarget("sys.btviewer");
  request.setUri("file:///tmp/test.png"); //  not recommended location!
  im->invoke(request);

Bluetooth Low Energy
BlackBerry 10や、BlackBerry Java デバイスは Bluetoothのローエネルギーには対応していません。

NFC

NFCのタグ読み込みはinvocation frameworkを使って、bar-descriptor.xmlで登録します

  <invoke-target id="com.rngs.BlackBerryJam.Americas.ScavengerHunt">
     <type>APPLICATION </type>
     <filter>
       <action>bb.action.OPEN </action>
       <mime-type>application/vnd.rim.nfc.ndef </mime-type>
       <property var="uris" 
          value="ndef://2/application/com.rim.devr.2012.bbja" />
     </filter>
   </invoke-target>

invoke-target
	The target id has to be globally unique… 

mime-type
	This is the type we have set internally to specify NDEF tag reading events.

property - value

詳細は ここです。

Writing a NDEF Tag
タグの書き込みは invocation framework 使って、行いますが低レベルの機能を使ってコードを書くことも出来るようです。

Other Tech (Peer 2 Peer, SNEP, Card Emulation…)
その他の通信に関しては、以下のURLに書かれています。

http://supportforums.blackberry.com/t5/Java-Development/NFC-Article-and-Code-Index/ta-p/1538775

[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その9)

その8は、ファイルアクセスに関する情報でした。

その9は、位置情報に関する情報です。

BlackBerry Java to BlackBerry 10 Cascades Porting Series – Part 9: Location (Inside BlackBerry Developer Blog)

BlackBerry 10で扱える位置情報は GPS,WiFi,基地局の位置情報をLoaction APIで扱えます。

location-porting1

位置情報のアップデートのスタートは以下のコードで行えます。

// Create the position source
QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(this); 
// connect the signal to listen for position updates
connect(_positionSource, 
	SIGNAL(positionUpdated(const QGeoPositionInfo &)),
	this, 
	SLOT(positionUpdated(const QGeoPositionInfo &))
)
// Start updates
source->startUpdates();

サンプルコードが以下のリンクにあるので参考になると思います。

https://github.com/blackberry/Cascades-Samples/tree/master/locationdiagnostics

ドキュメント情報です。

https://developer.blackberry.com/cascades/documentation/device_platform/location/index.html

[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その8)

その7は、PIMに関する情報でした。

その8は、ファイルアクセスに関する情報です。

BlackBerry Java to BlackBerry 10 Cascades Porting Series – Part 8: Storage (Inside BlackBerry Developer Blog)

Cascadesのフレームワークでは、アプリケーションからデータにアクセスするためモジュール式のアクセス方式を用意しています。
Cascadesでは、XML,JSON,SQLの3つのデータアクセスフォーマットが用意されています。

これまでの、BBOSとBlackBerry 10のデータアクセスの比較表です。

Storage Type BlackBerry OS BlackBerry 10
Application Storage
(internal to the BlackBerry deice)
内部ファイルシステム(Internal File System)には、オペレーティングシステムとJVMが含まれています。アプリケーション記憶領域(Application Storage)も内部ファイルシステムと同じくフラッシュメモリとオンボードの記憶装置と呼ばれます。 アプリケーション記憶領域はアプリケーションを走らせられることができるBlackBerryデバイス上の唯一の場所です。 すべてのBlackBerryデバイスはアプリケーション記憶領域を持っています。 BASE, USER, RADIOの3つのファイルシステムが存在します。
BASEとRADIOは”read-only”です。USERは”read/write”で、アプリケーションと、BlackBerry 10プラットフォームの非蓄積型データが存在します。
External Media Card Storage
Optional and removable microSD card that Users can insert to extend the storage on their device.
FATファイルシステムのメディアカードがマウントされます。BlackBerry Software 4.2以降では、miscoSDカードをサポートします。 FATファイルシステムのメディアカードがマウントされます。

USER File system
BlackBerry 10 introduces a file system (recall on BBOS there was no file system). So, what to know about the file system? Firstly, the working directory is where your app is started – it is also called current directory and the sandbox ($sandbox/app). Access to files and folders in the working directory is controlled through Unix-style groups and permissions. Key point: never hardcode absolute file paths – all should be relative to your sandbox.

BlackBerry 10のファイルシステムは以下の図のようになっています。フォルダーのアクセスコントロールはUNIX-Styleのグループとパーミッションになっています。アップリケーションのワーキングディレクトリはカレントディレクトリ($sandbox/app)になっていて、絶対Pathでのハードコードはしません。

bb10java

ベースOSがQNXなので、パーミッションがUNIXベースというのは理解できます。

XML, JSON, SQLでのアクセス方法は、リンク先にサンプルコードがあるので、参照すると良いと思います。

[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その7)

その6は、カメラに関する情報でした。

その7は、PIMに関する情報です。

BlackBerry Java to BlackBerry 10 Cascades Porting Series – Part 7: PIM (Inside BlackBerry Developer Blog)

PIM(ContactsCalendarMessages)の扱いに関しては、BlackBerry Java と同じように PIM APIs を使って、CRUD (create, read, update, delete) 操作を行います。

BlackBerry HUBへの通知は、Notification API を使って行います。

PIM操作は難しく無さそうです。

[BB10] BlackBerry JavaからBlackBerry 10 Cascadesへのポーティング(その6)

その5は、ユーザーインタフェースに関する情報でした。

その6は、カメラに関する情報です。

BlackBerry Java to BlackBerry 10 Cascades Porting Series – Part 6: Camera (Inside BlackBerry Developer Blog)

BlackBerry OS 7,7.1では、アプリケーションからカメラアプリケーションを起動し撮影したファイルを利用する方法と、 javax.microedition.media API を使ってアプリケーション内部から画像やビデオを撮影する方法がありました。

BlackBerry 10でもOS 7, 7.1と同じようにアプリケーションからカメラアプリケーションを利用する Invocation Framework を使って操作出来ます。

Setup: (カメラアプリケーションの起動準備)

	_invokeManager = new InvokeManager(this);
	QObject::connect(_invokeManager,
			SIGNAL(childCardDone(const bb::system::CardDoneMessage&)), this,
			SLOT(onChildCardDone(const bb::system::CardDoneMessage&)));

Invoking: (カメラアプリケーション起動のためのパラメータ設定と起動)

	InvokeRequest invokeRequest;
	invokeRequest.setTarget("sys.camera.card");
	invokeRequest.setMimeType("image/jpeg");
	invokeRequest.setAction("bb.action.CAPTURE");
	invokeRequest.setData("photo");
	InvokeTargetReply *invokeReply = _invokeManager->invoke(invokeRequest);

Dealing with the result: (撮影したファイル情報の取得)

void CameraInvoker::onChildCardDone(const bb::system::CardDoneMessage
		&message){
	qDebug() << “File URI:” << message.data() << endl;
}

アプリケーション内部からカメラを利用する場合は、Cascades Camera APIを使う方法と、C Camera Libraryを使う方法があります。

Cascades Camera API

バーコードを読み取るためのAPIも用意されています。

C Camera Library

C Libraryを利用する場合には、ローレベルの制御が可能なのですが、制御を細かく設定する必要があるので、Cascades Camera APIを使った方が使い易いと思います。