最近在看 nanChen 写的图片选择器 ImagePicker,感觉写得很不错,也打算把从中学到的东西写下来。很多时候,遇到一个好的框架能够降低开发成本这是好事。但是也要去了解其内部具体实现逻辑,说不定哪天你需要完成一个类似的小功能,你知道原理就能快速写出来,而不是引入整个框架。
系统现有相机应用对于如何调用系统现有应用,这里简单再说一下。在开发的应用中调用系统现有应用,需要使用 Intent 指定开启的应用的 Action 和 Category,然后通过 startActivity(Intent) 或者 startActivityForResult(Intent, int) 开启指定的 Activity,如果使用 startActivityForResult() 方法开启并需要返回值,再重写 onActivityResult(int, int, Intent) 即可。
先来看看系统现有相机应用的 AndroidManifest.xml 清单文件定义的 Activity:
<activity android:name="com.android.camera.Camera" android:clearTaskOnLaunch="true" android:configChanges="orientation|keyboardHidden" android:screenOrientation="landscape" android:taskAffinity="android.task.camera" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <categroy android:name="android.intent.category.DEFAULT" /> <categroy android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <categroy android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.media.action.STILL_IMAGE_CAMERA" /> <categroy android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.android.camera.VideoCamera" android:clearTaskOnLaunch="true" android:configChanges="origientation|keyboardHidden" android:label="@string/video_camera_label" android:screenOrientation="landscape" android:taskAffinity="android.task.camcorder" android:theme="@android:style/theme.Black.NoTitleBar.Fullscreen" > <intent-filter> <action android:name="android.media.action.VIDEO_CAMERA" /> <categroy android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.media.action.VIDEO_CAPTURE" /> <categroy android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>