一般用例:使用Anymote庫Android移動應用與Android電視溝通
我的項目,我想實現一些簡單的遊戲,如乒乓球或簡單的測驗爲Android電視。電視分別安卓電視盒顯示遊戲和處理邏輯(獨立模塊)。智能手機和平板電腦應作爲這些遊戲的簡單控制器(獨立模塊)。例如:在玩Pong時,手機上的應用程序只顯示2個箭頭,用於向上或向下移動播放器的槳。對於電視上的應用程序與移動設備上的應用程序之間的連接和通信,使用Google Nearby Connections API的。
實際的問題:
要求,現在是,用戶可以從他的電話開始的乒乓球比賽。這意味着:他在自己的移動設備上打開簡單的控制器應用程序,選擇一個假名,然後決定是否要開始一個新的Pong遊戲,或者如果他想加入現有的Pong遊戲。因此,當用戶想要開始pong遊戲時,他應該能夠按下屏幕上的按鈕,並且Android TV上的應用程序將開始(如果尚未運行)。
我在這方面做了大量的研究,很遺憾不得不發現沒有太多的例子或源代碼可用於這種功能。幸運的是,我找到了官方谷歌電視遙控器應用的源代碼(由於我的聲望太低,我無法添加鏈接)。
我已經知道,這是對於上了年紀谷歌電視一個應用程序,而不是的Android電視。但是在看一看它時,我發現存在這樣的功能,我想要的就是這種功能。我下載它從這裏:https://github.com/google/googletv-android-samples
我在哪裏受阻的時刻:
所以,我把AnymoteLibrary從上面的鏈接,並將其導入到我現有的項目在Android Studio中作爲一個單獨的模塊。一些導入修復和Gradle清理後,我認爲它可能工作。我適應了的build.gradle文件,該文件是這樣的:
apply plugin: 'com.android.library'
dependencies {
//compile 'com.google.protobuf:protobuf-java:2.6.1'
compile files('libs/anymote.jar')
compile files('libs/bcprov-jdk15-143.jar')
compile files('libs/polo.jar')
compile files('libs/protobuf-java-2.2.0-lite.jar')
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 17
targetSdkVersion 23
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
,並添加從目錄改編BlackJackRemoteActivity.java的GoogleTV,Android的樣本/ BlackJackTVRemote/src目錄/ com/example/google/tv/remote/blackjack/從上面的鏈接到我在移動模塊上的用例。因此,我只是想測試一下我是否可以從我的應用中獲得Android TV的控制權,所以我試圖運行它。起初,應用程序啓動時,它似乎工作(見下面的日誌消息),但後來我得到一個異常:
E/KeyStoreUtil: Key store missing identity for anymote-remote
V/KeyStoreUtil: Generating key pair ...
V/KeyStoreUtil: Generating certificate ...
E/dalvikvm: Could not find class 'org.bouncycastle.jce.provider.BouncyCastleProvider', referenced from method com.google.polo.ssl.SslUtil.generateX509V1Certificate
W/dalvikvm: VFY: unable to resolve new-instance 9479 (Lorg/bouncycastle/jce/provider/BouncyCastleProvider;) in Lcom/google/polo/ssl/SslUtil;
E/dalvikvm: Could not find class 'org.bouncycastle.jce.provider.BouncyCastleProvider', referenced from method com.google.polo.ssl.SslUtil.generateX509V3Certificate
W/dalvikvm: VFY: unable to resolve new-instance 9479 (Lorg/bouncycastle/jce/provider/BouncyCastleProvider;) in Lcom/google/polo/ssl/SslUtil;
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x416a0e18)
最終的異常消息:
E/AndroidRuntime: FATAL EXCEPTION: main Process: androidtvportablecontroller, PID: 23592 java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider at com.google.polo.ssl.SslUtil.generateX509V3Certificate(SslUtil.java:118) at com.google.polo.ssl.SslUtil.generateX509V3Certificate(SslUtil.java:165) at com.example.google.tv.anymotelibrary.connection.KeyStoreManager.generateAppCertificate(KeyStoreManager.java:154)
我完全不知道那裏的BouncyCastleProvider來自我如何調整我的代碼來修復這個異常。
再說一遍,我甚至不確定我是不是在浪費Google TV時代的這段舊代碼,以便在手機和電視應用程序之間獲得所需的功能。
幫助將非常感激。
BouncyCastleProvider的.jar文件位於我的lib目錄中。我也嘗試了一個較小的版本(正如你的鏈接建議)。可悲的是,仍然是同樣的問題。 – quantumflux