android video

1. qml调用java

思路是先调用C++方法,再在C++中使用jni调用java:

http://www.tuicool.com/articles/my2Yba

2. 安卓播放视频

http://blog.csdn.net/chenjie19891104/article/details/6338202

http://www.2cto.com/kf/201208/148912.html

3.jni参数传递

// C++ code
QAndroidJniObject string1 = QAndroidJniObject::fromString("String1");
QAndroidJniObject string2 = QAndroidJniObject::fromString("String2");
QAndroidJniObject stringArray = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/TestClass",
                                                                          "stringArray"
                                                                          "(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"
                                                                           string1.object<jstring>(),
                                                                           string2.object<jstring>());

参考:http://doc.qt.io/qt-5/qandroidjniobject.html

4. android播放结束事件

使用videoview播放:

问题1:layout文件

layout文件是xml格式的资源文件,存放在res/layout目录下

问题2:多activity

需要在某个activity中启动另一个activity

参考:http://blog.csdn.net/x605940745/article/details/14417721

注意新的activity需要在manifast.xml文件中申明

问题3:播放完成事件监听器

http://www.cnblogs.com/plokmju/p/android_VideoView.html

5. java调用c++

java可以申明一个native方法通过jni调用外部接口,qt提供了QAndroidJniEnvironment工具可以很方便的获取java的jni环境,只需要在jni环境中将未注册native方法绑定到c++方法上即可。

1. 在java类中申明一个public native方法

2 在c++中使用QAndroidJniEnvironment 的 RegisterNatives 方法为该java类的native方法注册(绑定)一个c++方法

其中先要用GetObjectClass方法获取java 类

具体参考:

http://www.cnblogs.com/kayfans/archive/2012/06/18/2553542.html

https://forum.qt.io/topic/51593/qt-5-4-android-call-qt-method-from-java-code

http://www.tuicool.com/articles/nERZRf7

6  activity传递参数

http://stackoverflow.com/questions/3913592/start-an-activity-with-a-parameter

7 mediaplayer 异常监听

http://www.cnblogs.com/plokmju/p/android_MediaPlayer.html

8. java解析json:gson

http://stackoverflow.com/questions/25556908/gson-json-list-to-java-listobject

http://www.cnblogs.com/hnrainll/archive/2012/04/18/2456192.html

https://github.com/google/gson/blob/master/UserGuide.md

9 videoview

http://www.cnblogs.com/over140/archive/2011/06/13/2079422.html

http://stackoverflow.com/questions/21716320/how-add-a-videoview-programmatically

http://www.skholingua.com/android-basic/user-interface/images-media/videoview

http://www.sampleprogramz.com/android/media.php

10

http://stackoverflow.com/questions/6216547/android-dynamically-add-views-into-view

11

http://stackoverflow.com/questions/7927449/stopping-an-android-activity

12 imageview & bitmap

缩放:http://blog.csdn.net/larryl2003/article/details/6919513

http://www.cnblogs.com/zgz345/archive/2013/01/08/2851204.html

13.线程间通讯

http://www.cnblogs.com/allin/archive/2010/05/19/1738800.html

14 timer

http://blog.csdn.net/koko7958/article/details/7165640

TimerTask运行在一个单独的线程里,而不是UI线程。所以使用Android timer时,注意android的单线程原则,确保线程安全。不要在TimerTask的run方法中做UI相关的操作,如:TextView.setText()等,这样可能会导致UI线程阻塞。如果需要可以使用handler向UI线程发消息,具体处理由UI线程自己完成。在使用完Timer之后,要使用Timer的cancel方法取消Timer,否则Timer一直在运行。

15 textview

http://www.cnblogs.com/over140/archive/2010/08/27/1809745.html

跑马灯:http://www.cnblogs.com/over140/archive/2010/08/20/1804770.html

16 LayoutParams 

http://www.cnblogs.com/shaweng/archive/2012/07/10/2585134.html

17 viewgroup

http://www.cnblogs.com/lqminn/archive/2013/01/23/2866543.html

http://www.jianshu.com/p/138b98095778

http://blog.csdn.net/lmj623565791/article/details/38339817

主要2个接口:

onMeasure

and

onLayout

前者是根据子视图计算viewgroup的大小

后者是对子视图进行布局(位置)

 

18 player收不到消息

跳转到video player activity以后player就收不到消息,只有video player activity finish退出后 才能接收

原因不明

 

19 activity生命周期

20 LayoutInflater

http://www.cnblogs.com/top5/archive/2012/05/04/2482328.html

这里说的很清楚:

对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;

对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。

用法:

http://blog.csdn.net/zuolongsnail/article/details/6370035

 

21 多窗口播放

跟我之前理解的一样,一个viewgroup可以包含多个view每一个view都是独立绘制的,这样可以实现多窗口播放,但是有几个问题:

1)单个窗口播放循环列表:

多个窗口同时播放,当某一个窗口播放结束后(在子线程中),主线程通过监听器或者handler捕获到播放完成事件,但是不知道这个事件是哪个窗口(view)触发的。

比如视频播放,需要在activity定义监听器listener监听complation事件,捕获到事件后需要播放该窗口的下一个节目,但是并不知道是哪个窗口。

listener还有一种设置方式是传递某个对象,该对象类只需要申明并实现对应的监听器即可(通过implements关键字)

这样就可以为每一个窗口创建一个播放器(player)对象,在该对象中实现播放调度即可。

http://www.linuxidc.com/Linux/2012-05/61186.htm

22 单个窗口播放不同类型的文件

java中的引用类似指针,使用强制转换可以指向不同类型的view,这样就可以实现不同类型的view到调度

23 gif播放

使用第三方的gifview会有内存溢出的问题,这里最佳实践是使用webview:

http://droid-blog.net/2011/10/17/tutorial-how-to-play-animated-gifs-in-android-part-3/

但是无法捕获播放完成事件,只能使用定时器来调度,需要使用Movie类获取gif文件时长

http://blog.csdn.net/peishichao/article/details/38539363

 

24 mediaplayer can not play video alertdialog

监听OnErrorListener事件,在重载onerror方法中返回true系统就不会弹出警告对话框

 

 

 

 

转载于:https://my.oschina.net/u/584525/blog/865755

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值