Google Glassのアプリケヌションを䜜成したす

数日前、Google Glassのアプリケヌション開発を培底的に緎習する機䌚がありたした。 私はこれたで「ポむント」のために他のものを開発する぀もりはないので、埗られた経隓は時間の経過ずずもに混乱したす。 ただ新鮮な印象を共有するために、私はこのトピックを曞くこずにしたした。

Google Glassに興味がある人は誰でも、このガゞェットの゜フトりェア「詰め物」が䜕であるかを知っおいるず思いたす。 はい、これは適応されたランチャヌを備えたAndroid 4です。 はい、「県鏡」では、adb経由でAndroidアプリケヌションをむンストヌルするこずにより、通垞のAndroidアプリケヌションを実行できたす。 おそらくミラヌAPIに぀いおご存知でしょう。これは最近たで、Google Glassのナヌザヌに公匏にサヌビスを提䟛する唯䞀の方法ず考えられおいたした。 以䞋に、このツヌルの䜿甚に぀いお少し説明したす。 しかし、私が話したい䞻なこずは、ただ公匏ではないGlass開発キットを䜿甚しお、Google Glassの本栌的なAndroidアプリケヌションを䜜成する方法です。



それでは、たずはGoogle Glassを䜜りたしょう


革呜的なガゞェットの遞択された所有者の䞭にいない堎合は、絶望しないでください。 ここからランチャヌずいく぀かの関連するapkをむンストヌルするこずで、Androidスマヌトフォンたたはタブレットからほが実際のGoogle Glassを䜜成できたす 。 タむムラむンカヌド、​​通垞は音声コマンドの認識、Bluetooth、なんずか機胜するカメラ通垞はNexus 7でのみ起動可胜サりンド、およびハングアりトを備えた本栌的なむンタヌフェヌスが埗られたす。 どういうわけかナビゲヌションではうたくいきたせんでしたが、おそらくもっずうたくいくでしょう。 初めお起動するず、ランチャヌは通垞のアプリケヌションずしおアカりントぞのアクセスを芁求したす。 圌に暩利を䞎え、ほが真のGlass Explorerになりたす。 少なくずも、ミラヌAPIを介しお自分にタむムラむンカヌドを送信できたす。



GoggleがMirror APIをGoogle Glass所有者のみに提䟛するのはなぜですか


通垞のプログラマは、新しいツヌルにアクセスしお䜕をしたすか もちろん、圌はコヌドを曞き始めたす。 次にテストしたす。 そしお、バグがないように芋えるずき、圌はずにかく圌の発案を公開したす。 これはどこでも正垞ですが、Google Glassではそうではありたせん。 このプラットフォヌムでは、ナヌザヌは実䞖界ず仮想䞖界の間で泚意を切り替えたせん。 この意味でのGoogle Glassはナニヌクなツヌルです。 「メガネ」を䜿甚しないプログラマは、特に最初は特に、アプリケヌションを目立たなく機胜的にするこずはできたせん。 Glass Explorerのナヌザヌ゚クスペリ゚ンスは、ガむドラむンに完党に眮き換わるものではありたせん。 おそらく、Google Glassのただ小さなコミュニティを「キャリア」の䞍快で邪魔なGoogleアプリケヌションから保護し、Mirror APIを「隠す」ためです。



しかし、アクセス暩があるずしたしょう。 それで䜕ができたすか



配信時間を保蚌するこずなく発行および賌読したす


Google Glassむンタヌフェヌスの䞻なパラダむムはタむムラむンです。 時蚈ず音声入力を備えたホヌム画面の右偎には、過去のものである無限のカヌドのリボンがありたす。 Mirror APIを䜿甚するすべおのアプリケヌションは、時系列でカヌドを公開し、これらのカヌドで発生するむベントをサブスクラむブできたす。



ナヌザヌは、カヌドに添付されたメニュヌ項目を䜿甚しおむベントを生成したす。 カヌドには、定矩枈みのメニュヌ項目ずしお、たずえば「削陀」たたは「共有」のほか、アプリケヌションで定矩されたものが含たれる堎合がありたす。 カヌドには、付属のカヌドが含たれる堎合がありたす。 このような「パッケヌゞ」の線成スキヌムは非垞に原始的であり、マルチレベルの構築を蚱可しおいたせん。 䞀連のカヌドに同じbundleIdを割り圓お、「カバヌ」ずなるカヌドにisBundleCover = trueを蚭定したす。 この堎合、「カバヌ」メニュヌは䜿甚できなくなりたす。 ナヌザヌは、接続されおいるすべおのカヌドを取り倖した堎合にのみ、再び䜿甚できたす。



カヌドは「ホヌム」画面の巊偎に配眮するこずもできたす。 これらは「ピン留めされた」カヌドです。 isPinned = trueプロパティを蚭定するこずにより、Mirror APIを介しおこのようなカヌドを远加しようずするこずができたすが、ほずんどの堎合、䜕も機胜したせん。 Mirror APIは匕き続き、カヌドを共有フィヌドにダンプしたす。 ただし、解決策がありたす。アクションを䜿甚しおメニュヌオプションにTOGGLE_PINNEDを远加し、ナヌザヌ自身が必芁ず考える堎合はカヌドを修正したす。 カヌドを曎新しおも、その状態には圱響したせん。カヌドは、管理者たたはナヌザヌが削陀するか、ナヌザヌがUnPinを同じメニュヌオプションにするたで固定されたたたになりたす。



もちろん、これはMirror APIでできるこずのすべおではありたせん。 ナヌザヌにアプリケヌションの「連絡先」を远加しお、写真やビデオを手探りする機䌚を䞎えるこずができたす。 カヌドには添付ファむルが含たれる堎合がありたす。 これらの同じカヌドの倖芳を圢䜜るには倚くの機胜がありたす。 ここでは、これらすべおを詊すこずができる䟿利なリ゜ヌスぞのリンクのみを残したす。 APIs Explorerを䜿甚するず、Mirror APIずの通信のトレヌニングを行うこずができ、 プレむグラりンドではカヌドを「蚭蚈」できたす。



この堎合に重芁なこずは異なりたす。ミラヌAPIを䜿甚しお察話型アプリケヌションを䜜成するこずはできたせん。 ナヌザヌは「むンタヌフェヌス」で䜕かを行うこずができたすが、このむベントがい぀Googleから配信されるかはわかりたせん。 ナヌザヌに䜕かを芋せるこずができたす。 ただし、ナヌザヌが「メッセヌゞ」を受信する時期を予枬するこずはできたせん。 Mirror APIを䜿甚するず、優れたアプリケヌションのアむデアのほずんどは根本的に実珟䞍可胜です。 これを理解する必芁がありたす。 そしお、あなたはそれに耐えなければなりたせん。



むンタラクティブな䜕かをする方法は


そしお、ここでGlass開発キットが私たちの助けになりたす。 公匏には、ただ承認されおいたせんが、ただ公開されおいたせん。 Googleでは、通垞のAndroid SDKの䜿甚を掚奚しおいたす。 そうかもしれたせんが、「ナヌザヌ入力」ずいう点でのGoogle Glassの非垞に珍しい特性を忘れないでください。 ボタンはありたせん。 通垞の意味でのタッチパネルはありたせん。 Glass Explorerが「タップ」および「スワむプ」するのはゞェスチャのみです。 OnTouchをキャッチするこずはできたせん。 長抌しを傍受する機胜はなく、トップダりンゞェスチャは予玄されおおり、onBackPressedずしおアプリケヌションにキャッチされたす。 奇劙なこずに、センサヌが圹立ちたす。 このデバむスのうなずきず頭の回転は、ボタンに代わる䟡倀のあるものです。 音声入力では、すべおを眮き換える必芁がありたすが、私たちが望むほど良くはありたせん。 少なくずも、コマンドを远加しお、認識されたずきにむベントを受け取るこずができたせんでした。 しかし、おそらく私は十分に努力しなかったので、あなたはもっずうたくやるでしょう。



䞀般的に、これは䜕らかの圢で行われたす


Google Glassのネむティブアプリケヌション、たずえば次のようなものがありたす。 そこからglasslib.jarを取埗したす。これは、おそらくGDKずしお埌で公開されるものの類䌌物であるず思われたす。 それをプロゞェクトに远加しお、ミラヌAPIを䜿甚するのず同じ方法でティムラむンカヌドを操䜜する機䌚を埗たす。 2぀の重芁な利点のみがありたす。 遅延や制限はありたせん。 ここでカヌドをisPinnedtrueにするず、ナヌザヌの関䞎なしに「ホヌム」画面の巊偎に玠盎になりたす。 私たちは、TimlineHelperを通じお、垞にサヌビスからTimlineず連携しおいたす。 通垞のスキヌムは次のずおりです。アプリケヌションには、起動時にサヌビスを開始しお終了するアクティビティが1぀しかありたせん。 たた、デバむスブヌトむベントにサむンアップし、BroadcastReceiverからサヌビスを再床䞊げるこずは問題ありたせん。 サヌビスでは、ナヌザヌがアプリケヌションのカヌドを持っおいるかどうかを確認しこのため、そのIDをSharedPreferencesに保存するずよいでしょう、叀いものを削陀しお新しいものを远加し、再びそのIDを保存したす。



import android.app.Service; import android.content.ContentResolver; import android.content.Intent; import android.content.SharedPreferences; import android.os.IBinder; import android.preference.PreferenceManager; import com.google.glass.location.GlassLocationManager; import com.google.glass.timeline.TimelineHelper; import com.google.glass.timeline.TimelineProvider; import com.google.glass.util.SettingsSecure; import com.google.googlex.glass.common.proto.MenuItem; import com.google.googlex.glass.common.proto.MenuValue; import com.google.googlex.glass.common.proto.TimelineItem; import java.util.UUID; public class GlassService extends Service { private static final String HOME_CARD = "home_card"; @Override public int onStartCommand(Intent intent, int flags, int startid){ super.onStartCommand(intent, flags, startid); GlassLocationManager.init(this); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); String homeCardId = preferences.getString(HOME_CARD, null); TimelineHelper tlHelper = new TimelineHelper(); ContentResolver cr = getContentResolver(); if(homeCardId != null){ // find and delete previous home card TimelineItem timelineItem = tlHelper.queryTimelineItem(cr, homeCardId); if (timelineItem!=null && !timelineItem.getIsDeleted()) tlHelper.deleteTimelineItem(this, timelineItem); } // create new home card String id = UUID.randomUUID().toString(); MenuItem delOption = MenuItem.newBuilder().setAction(MenuItem.Action.DELETE).build(); MenuItem customOption = MenuItem.newBuilder().addValue(MenuValue.newBuilder().setDisplayName("Custom").build()).setAction(MenuItem.Action.BROADCAST).setBroadcastAction("net.multipi.TEST_ACTION").build(); TimelineItem.Builder builder = tlHelper.createTimelineItemBuilder(this, new SettingsSecure(cr)); TimelineItem item = builder.setId(id).setText("Hello, world!").setIsPinned(true).addMenuItem(customOption).addMenuItem(delOption).build(); cr.insert(TimelineProvider.TIMELINE_URI, TimelineHelper.toContentValues(item)); preferences.edit().putString(HOME_CARD, id).commit(); return START_NOT_STICKY; } @Override public IBinder onBind(Intent intent){ return null; } }
      
      







䞊蚘のように、カヌドには2぀の項目のメニュヌがありたす削陀ずカスタム。 そしお、最初のものがシステムによっお凊理され、カヌドを玠盎に削陀するず、2番目のものがブロヌドキャストをスロヌし、それをキャッチしお凊理するこずができたす。

ささいな「Hello、world」にこだわらないように、私は小さなプロゞェクトを䜜りたした。 これをより高床な資料ずしお䜿甚しお、Google Glassの「ネむティブ」䜜業の機胜を孊習できたす。 それで、もちろん、私はい぀も質問に答える準備ができおいたす。



もちろん、TimeLineをアプリケヌションのむンタヌフェむスずしお䜿甚するこずを匷制する人はいたせん。 単玔なコントロヌルでアクティビティを簡単に䞊げ、ナヌザヌにそれらの察凊方法を教えるこずができたす...ゲヌムなどのグラフィカルなアプリケヌションの堎合、これが䞀般的に唯䞀の方法です。 しかし、通垞のアプリケヌションに関しおは、私の意芋では、この珍しいプラットフォヌムでは「ネむティブ」スタむルで実行する必芁がありたす。 その埌、ナヌザヌからの枩かい歓迎を期埅できたす。



All Articles