Я пишу приложение Titanium, пытающееся воспроизвести видео на YouTube. Цель состоит в том, чтобы удержать пользователя внутри приложения, поэтому вызов собственного приложения YouTube, о котором я могу сделать уже, не может быть и речи. У меня есть код, который работает на iOS, но только потому, что вложение в webView поддерживает контент. Это не относится к Android, к сожалению.
Кажется, http://code.google.com/p/android-youtube-player/wiki/OpenYouTubePlayerActiviyInstructions решит мои проблемы, но я не уверен, как использовать его у Titanium. Документ предлагает сделать это с Android:
Intent lVideoIntent = new Intent(null, Uri.parse("ytpl://"+YOUTUBE_PLAYLIST_ID), this, OpenYouTubeActivity.class);//public Intent (String action, Uri uri, Context packageContext, Class<?> cls) from Android doc
startActivity(lVideoIntent);
Итак, используя http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.Android.Intent-object.html и http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.Android.Activity-object.html как руководства, придумал:
var intent = Ti.Android.createIntent({
action: 'null',
data: 'ytv://'+vguid,
packageName: 'com.keyes.youtube',
className: 'com.keyes.youtube.OpenYouTubeActivity'
});
Ti.Android.Activity.startActivity(intent);
В моем TiApp.XML я добавил следующее:
<android xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<activity android:name="com.keyes.youtube.OpenYouTubePlayerActivity"></activity>
</android>
Когда я пытаюсь запустить код, я получаю эту ошибку: TypeError: не может вызвать метод "startActivity" из undefined (файл:///android_asset/Resources/app.js#162) где 162 - номер строки startActivity (намерение);
Я думаю, что это связано с тем, что источник не находится в пути к классам (я пытался использовать только его .jar, а также отдельные .java файлы) и/или не использовался в качестве модуля. Я использовал модуль ONE iOS, но понятия не имею, как написать свой собственный Android один, не говоря уже о переносе кого-то кода в модуль.
Любая помощь? Я уверен, что это то, с чем сражаются многие титановые пользователи.
изменить 1
У меня есть некоторый прогресс в этом, все еще нет решения. Я пошел по модулю, потому что я не видел другого способа получить файлы jars/java, включенные в сборку проекта. Я построил модуль как "ytModule" и включил его, добавив
<module version="0.1">com.keyes.ytModule</module>
в tiapp.xml. Затем я получаю
[DEBUG] Looking for Titanium Module id: com.keyes.ytModule, version: 0.1, platform: <any platform>
[DEBUG] module_id = com.keyes.ytModule
[DEBUG] appending module: com.keyes.ytModule.YtplayerModule
когда я строю из TitaniumStudio. Я работаю над этим и буду продолжать публикации обновлений/попыток предложения
Попробуйте использовать новый SDK. http://developer.appcelerator.com/doc/mobile/android/module_sdk
The reason is its not able to call the Activity method which is
сброс этой ошибки.
Ti.Android.currentActivity.startActivity(intent)
Это должно работать.