Androidセットアップガイド

Android Studioプロジェクトのセットアップ

Android Studioプロジェクトをセットアップするには、空のプロジェクトを作成します。必要な手順は以下のとおりです。また、これらの手順をすでに実装したWikitude SDK Androidパッケージに同梱されているサンプルも使用することができます。

android {
    ...
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation (name: 'wikitudesdk', ext:'aar')
    implementation 'com.android.support:appcompat-v7:21.0.3'
    implementation 'com.google.ar:core:1.1.0'
}
repositories {
    flatDir{
        dirs 'libs'
    }
}
    defaultConfig {
        applicationId "xxxx"
    }
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.location" android:required="true" />
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.sensor.compass" android:required="true" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
[Activity(Label = "SimpleArActivity", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.KeyboardHidden | Android.Content.PM.ConfigChanges.ScreenSize)]
public class SimpleArActivity : Activity
{
    ...
}

アクティビティ内のArchitectView

Wikitude SDKは、他のSDKのようなネイティブのAndroid SDKではないことに注意してください。基本概念は、ArchitectViewをプロジェクトに追加し、このビューにライフサイクルイベントを通知することです。ArchitectViewは、カメラビューを作成してセンサーイベントを処理します。ARchitect WorldはJavaScriptで実装され、アプリケーションのassetsフォルダーまたは独自のサーバーにパッケージ化されます(このプロジェクトではassetsフォルダーを使用します)。ARchitect WorldはHTMLとJavaScriptで記述され、WikitudeのAR-namespace(例: AR.GeoObject)のメソッドを呼び出します。

AR namespaceを使用するには、HTMLファイルに次の行をインクルードする必要があります。

 <script src="https://wikitude.com/libs/architect.js"></script>

そうすると、それらのHTMLファイルがarchitectViewによって適切に処理されます。ARchitect Worldをデスクトップブラウザでテストするには、JavaScriptエラーを回避するため、および開発コンソールを表示するために、ade.jsツールをインクルードする必要があります。

ARchitect Worldは別々のActivityで処理することを推奨します。レイアウトXMLの内部でArchitectViewを宣言します。たとえば、FrameLayoutの親タグ内に以下のコードを追加します。

<com.wikitude.architect.ArchitectView android:id="@+id/architectView"
   android:layout_width="fill_parent" android:layout_height="fill_parent"/>

ArchitectViewはカメラビューを作成するので、アプリケーションの他の場所でカメラを使用する場合は適切にカメラを解放してください。カメラ(フロントカメラまたはバックカメラ)のほかにコンパスと加速度計の値も利用されます。これらすべての機能を使用するには、サポートされているAndroidデバイスを参照してください。

現在のデバイスが必要なすべてのハードウェアおよびソフトウェアを備えているかどうかを確認するには、ArchitectView.isDeviceSupported(Context context)を使用します。

メモ: サポートされているデバイスのみがArchitectViewを利用できるようにしてください。

ArchitectViewにActivityのライフサイクルイベントを通知することは非常に重要です。ArchitectViewのonCreate()、onPostCreate()、onPause()、onResume()、onDestroy()をActivityのライフサイクルメソッド内で呼び出します。ベストプラクティスは、ArchitectView用のメンバ変数をActivityで定義することです。これはActivityのonCreate()setContentViewの直後に設定し、以降はそのメンバ変数を通じてArchitectViewにアクセスします。

this.architectView = (ArchitectView)this.findViewById( R.id.architectView );
final ArchitectStartupConfiguration config = new ArchitectStartupConfiguration();
config.setLicenseKey( * license key */ );
this.architectView.onCreate( config );
メモ:Android 6.0以降では、architectView.onCreate( config )を呼び出す前に、アプリにカメラランタイムのアクセス権があることを確認する必要があります。

ActivityのonPostCreate()は、ARchitect Worldをロードするのに最も適した場所です。

this.architectView.onPostCreate();
this.architectView.load( "YOUR-AR-URL" );

architectView.load()の引数には、ARchitect Worldを定義したHTMLファイルへのパスを指定します。これには、assetsフォルダーのルートからの相対パスまたはWeb URL(http://またはhttps://で始まる)を使用できます。たとえば、architectView.load('arexperience.html')はプロジェクトのassetsフォルダーにあるHTMLファイルを開き、architectView.load('http://your-server.com/arexperience.html')はサーバーからファイルをロードします。

メモ: HTMLファイルへの引数を渡す場合は、必ずURLを指定する必要があります。次のコードは機能しません。

architectView.load('arexperience.html?myarg=1')

ロケーション

ロケーション(位置情報)の管理は、ロケーションベース型ARアプリケーションにおいて重要です。ロケーションはGPSまたはネットワークを介して取得され、毎秒更新されることもあれば、更新間隔が長いこともあります。SDKExamplesアプリケーションサンプルはLocationProviderの基本的な実装を提供しますが、これはAndroidで使用可能な最良のロケーションストラテジーとは言えません。

特別な要件がある場合は、独自に作成した高度なロケーションストラテジー実装を使用してください