Android相机启动与从第三方应用调用启动是有不同的,第三方应用调用系统相机启动时在onCreate()函数中会有一个类似与parseIntent()(4.4.2相机)的函数用来分析相机是自身启动还是第三方调用(自身启动和第三方调用,相机启动时界面显示会有不同)。
- private void parseIntent() {
- Intent intent = getIntent();
- String action = intent.getAction();
- if (MediaStore.ACTION_IMAGE_CAPTURE.equals(action)
- || MediaStore.ACTION_IMAGE_CAPTURE_SECURE.equals(action)) {
- mPickType = PICK_TYPE_PHOTO;
- } else if (EXTRA_VIDEO_WALLPAPER_IDENTIFY_VALUE.equals(
- intent.getStringExtra(EXTRA_VIDEO_WALLPAPER_IDENTIFY))) {
- mWallpaperAspectio = intent.getFloatExtra(EXTRA_VIDEO_WALLPAPER_RATION,
- WALLPAPER_DEFAULT_ASPECTIO);
- intent.putExtra(EXTRA_QUICK_CAPTURE, true);
- mPickType = PICK_TYPE_WALLPAPER;
- } else if (MediaStore.ACTION_VIDEO_CAPTURE.equals(action)) {
- mPickType = PICK_TYPE_VIDEO;
- } else if (ACTION_STEREO3D.equals(action)){
- mPickType = PICK_TYPE_STEREO3D;
- } else {
- mPickType = PICK_TYPE_NORMAL;
- }
- if (mPickType != PICK_TYPE_NORMAL) {
- mQuickCapture = intent.getBooleanExtra(EXTRA_QUICK_CAPTURE, false);
- mSaveUri = intent.getParcelableExtra(MediaStore.EXTRA_OUTPUT);
- mLimitedSize = intent.getLongExtra(MediaStore.EXTRA_SIZE_LIMIT, 0L);
- mCropValue = intent.getStringExtra(EXTRA_PHOTO_CROP_VALUE);
- mLimitedDuration = intent.getIntExtra(MediaStore.EXTRA_DURATION_LIMIT, 0);
- mAppGuideFinished = true;
- }
- Log.i(TAG, "parseIntent() mPickType=" + mPickType + ", mQuickCapture="
- + mQuickCapture + ", mSaveUri=" + mSaveUri + ", mLimitedSize=" + mLimitedSize
- + ", mCropValue=" + mCropValue + ", mLimitedDuration=" + mLimitedDuration);
- if (true) {
- Log.d(TAG, "parseIntent() action=" + intent.getAction());
- Bundle extra = intent.getExtras();
- if (extra != null) {
- mCanShowVideoShare = extra.getBoolean(CAN_SHARE, true);
- for (String key : extra.keySet()) {
- Log.v(TAG, "parseIntent() extra[" + key + "]=" + extra.get(key));
- }
- }
- if (intent.getCategories() != null) {
- for (String key : intent.getCategories()) {
- Log.v(TAG, "parseIntent() getCategories=" + key);
- }
- }
- Log.v(TAG, "parseIntent() data=" + intent.getData());
- Log.v(TAG, "parseIntent() flag=" + intent.getFlags());
- Log.v(TAG, "parseIntent() package=" + intent.getPackage());
- Log.v(TAG, "mCanShowVideoShare = " +mCanShowVideoShare);
- }
- }
另外貌似isImageCaptureIntent()函数也可以用来判断相机是否为短信或联系人编辑界面发送的intent到camera.
- public boolean isImageCaptureIntent() {
- return PICK_TYPE_PHOTO == mPickType;
- }