自动拍照功能遇到的问题

tengerye 2013-12-02 08:16:10
想实现自动拍照的功能:主界面有两个按钮,一个开始,一个结束。按下开始后,用户可以退出该activity,然后该干嘛干嘛,相机会每几秒自动拍一次照,然后存起来;最后想结束的时候,进入该activity把这个功能结束。
在实现的时候遇到几个问题:
1.根据上述,应该把自动照相放到多线程,那是否我应该使用service还是intentservice更好些,还是有其它的方法实现多线程?
2.定时是和java一样使用thread吗?
3.camer.takepicture()必须在camera.startpreview()之后才能有效,但是据上述,我并不需要使用Preview,该怎么办?


新手诚心求教。
...全文
359 1 收藏 17
写回复
17 条回复
tengerye 2013年12月25日
功能虽然完成了,但是好像不是很好。
回复 点赞
afairycell 2013年12月20日
用SQLite记录那个已经上传完毕了。多线程是一种辅助主线程使用的工具,这个功能用那个都差不多
回复 点赞
tengerye 2013年12月19日
引用 14 楼 ameyume 的回复:
[quote=引用 13 楼 tengerye 的回复:] [quote=引用 12 楼 ameyume 的回复:] [quote=引用 11 楼 tengerye 的回复:] 再请教给位大神一个问题:官网上说service 是再后台运行的,不需要交互。但是又说service如果有耗时的操作会阻塞前台。(Remember that if you do use a service, it still runs in your application's main thread by default, so you should still create a new thread within the service if it performs intensive or blocking operations.) 这不是耍我吗?
service的确是在后台运行的,service运行在主线程中会阻塞UI操作,如果service有耗时操作可以在service中开启新线程执行耗时操作。[/quote] 就是不理解为什么既然再后台运行,但是却会阻塞UI操作呢?这不可能阿。[/quote] 后台运行有可能也在主线程里面运行,例如service有个reset方法,UI上有个“重置”按钮,点击重置按钮就在主线程调用service的reset方法,reset方法如果很耗时又没有放在新线程中执行的话就会导致主线程阻塞发生ANR. service只是没有界面,可以后台运行,用户看不到而已。[/quote] 谢谢,最后一个问题:现在可以定时拍照了,但是还需要自动上传,如果没有网络就先存入本地,然后有网络就继续上传。现在遇到的问题是,网络恢复正常之后,本地的照片上传和自动拍照的即时上传如何不冲突?使用哪一种android多线程类比较好?
回复 点赞
ameyume 2013年12月09日
引用 11 楼 tengerye 的回复:
再请教给位大神一个问题:官网上说service 是再后台运行的,不需要交互。但是又说service如果有耗时的操作会阻塞前台。(Remember that if you do use a service, it still runs in your application's main thread by default, so you should still create a new thread within the service if it performs intensive or blocking operations.) 这不是耍我吗?
service的确是在后台运行的,service运行在主线程中会阻塞UI操作,如果service有耗时操作可以在service中开启新线程执行耗时操作。
回复 点赞
ameyume 2013年12月09日
引用 13 楼 tengerye 的回复:
[quote=引用 12 楼 ameyume 的回复:] [quote=引用 11 楼 tengerye 的回复:] 再请教给位大神一个问题:官网上说service 是再后台运行的,不需要交互。但是又说service如果有耗时的操作会阻塞前台。(Remember that if you do use a service, it still runs in your application's main thread by default, so you should still create a new thread within the service if it performs intensive or blocking operations.) 这不是耍我吗?
service的确是在后台运行的,service运行在主线程中会阻塞UI操作,如果service有耗时操作可以在service中开启新线程执行耗时操作。[/quote] 就是不理解为什么既然再后台运行,但是却会阻塞UI操作呢?这不可能阿。[/quote] 后台运行有可能也在主线程里面运行,例如service有个reset方法,UI上有个“重置”按钮,点击重置按钮就在主线程调用service的reset方法,reset方法如果很耗时又没有放在新线程中执行的话就会导致主线程阻塞发生ANR. service只是没有界面,可以后台运行,用户看不到而已。
回复 点赞
tengerye 2013年12月09日
引用 12 楼 ameyume 的回复:
[quote=引用 11 楼 tengerye 的回复:] 再请教给位大神一个问题:官网上说service 是再后台运行的,不需要交互。但是又说service如果有耗时的操作会阻塞前台。(Remember that if you do use a service, it still runs in your application's main thread by default, so you should still create a new thread within the service if it performs intensive or blocking operations.) 这不是耍我吗?
service的确是在后台运行的,service运行在主线程中会阻塞UI操作,如果service有耗时操作可以在service中开启新线程执行耗时操作。[/quote] 就是不理解为什么既然再后台运行,但是却会阻塞UI操作呢?这不可能阿。
回复 点赞
tengerye 2013年12月08日
再请教给位大神一个问题:官网上说service 是再后台运行的,不需要交互。但是又说service如果有耗时的操作会阻塞前台。(Remember that if you do use a service, it still runs in your application's main thread by default, so you should still create a new thread within the service if it performs intensive or blocking operations.) 这不是耍我吗?
回复 点赞
ameyume 2013年12月05日
用handler发送延迟消息,接收到消息后拍照保存就可以。
回复 点赞
ameyume 2013年12月05日
用service就行,后台运行的都是service,例如后台播放音乐。
回复 点赞
ameyume 2013年12月05日
引用 8 楼 tengerye 的回复:
[quote=引用 7 楼 ameyume 的回复:] 用handler发送延迟消息,接收到消息后拍照保存就可以。
我现在的做法是 在camera.takePicture()之前,先camera.startPreview()。我现在已经完成了。这个程序在api10的手机上是好使的,但是到了api15却不行了。您知道有没有什么解决方法吗? [/quote] 这个不清除,是否与手机硬件/系统有关? 楼主可以对照下Camera的API,看看api10以上有什么变化。 http://developer.android.com/reference/android/hardware/Camera.html
回复 点赞
tengerye 2013年12月05日
引用 9 楼 ameyume 的回复:
[quote=引用 8 楼 tengerye 的回复:] [quote=引用 7 楼 ameyume 的回复:] 用handler发送延迟消息,接收到消息后拍照保存就可以。
我现在的做法是 在camera.takePicture()之前,先camera.startPreview()。我现在已经完成了。这个程序在api10的手机上是好使的,但是到了api15却不行了。您知道有没有什么解决方法吗? [/quote] 这个不清除,是否与手机硬件/系统有关? 楼主可以对照下Camera的API,看看api10以上有什么变化。 http://developer.android.com/reference/android/hardware/Camera.html[/quote] 我在网上搜好像是说api15在照相这一功能上重写过了,因为谷歌眼镜也是用的api15。现在在camera.startPreview()之前必须调用camera.setPreviewDisplay()或者是camera.setPreviewTexture()。有没有可能用一种方式“骗过”camera呢?谢谢
回复 点赞
tengerye 2013年12月05日
引用 7 楼 ameyume 的回复:
用handler发送延迟消息,接收到消息后拍照保存就可以。
我现在的做法是 在camera.takePicture()之前,先camera.startPreview()。我现在已经完成了。这个程序在api10的手机上是好使的,但是到了api15却不行了。您知道有没有什么解决方法吗?
回复 点赞
tengerye 2013年12月04日
我在api10可以做到,为什么到了api15却不行呢?
回复 点赞
mmorss 2013年12月03日
可以设置一个很小的Activtiy,悬浮在桌面上,preview,反正别个也看不到
回复 点赞
tengerye 2013年12月03日
好吧。那用哪一种线程方式比较好呢?官方指导说service不适合长时间用。
回复 点赞
顾小林 2013年12月03日
camera 必须先开启预览才能拍照 除非底层支持,建议楼主不要挣扎了。 楼主可以开启一个service 然后一段时间发一个广播,在camera 的activity里面接收这个广播,然后该干嘛干嘛 service 里面可以用定时器,可以其他具体技术自己选择
回复 点赞
tengerye 2013年12月02日
诚心求各位大神指导
回复 点赞
发动态
发帖子
Android
创建于2009-10-09

4.6w+

社区成员

9.0w+

社区内容

移动平台 Android
社区公告
暂无公告