【问题标题】:Android camera intent never returns to appAndroid相机意图永远不会返回到应用程序
【发布时间】:2014-08-20 10:16:43
【问题描述】:

我有一个非常令人沮丧的问题。我使用 android camera intent 来启动摄像机并录制视频。

我的期望:当我按下停止时,我想通过 onActivityResult 返回我的应用活动以执行一些操作,例如显示视频录制的缩略图等。

发生了什么:当我按下停止时,屏幕会闪烁,好像返回到应用程序一样,然后只是继续显示相机。我在 onActivityResult 里面放了一个日志,它永远不会在这里回调!请注意,这不是意图数据 == null 的问题。这是一个根本不调用该方法的问题。当我查看我的媒体目录时,视频文件实际上就在那里,所以录制确实发生了并将文件存储在那里。

我在做什么: 我通过在我的活动中单击按钮来调用相机意图:

public class MainActivity extends Activity {

  public void startVideo(){
    //set the path
    String fileName = "MyVid_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".mp4";
    File externalFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), fileName);
    Uri videoUri = Uri.fromFile(externalFile)

    //setup up the video intent
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
    takeVideoIntent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, maxStorage); //set the max file size - variable calculated elsewhere
    takeVideoIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,   Configuration.ORIENTATION_LANDSCAPE); //set the camera orientation
    takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, CamcorderProfile.QUALITY_480P); //set the camera resolution
    takeVideoIntent.putExtra(MediaStore.EXTRA_SHOW_ACTION_ICONS, true); //set the camera btns

    //start the intent
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, VIDEO_INTENT);
    }
  }

  //then i have the onActivtyResult - this part is never called, regardless of whether data is null or not
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      Log.d("***1 LOG onActivityResult - requestCode: ", String.valueOf(requestCode));
  }

}

我的权限如下:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.camera" android:required="true" />

我启动意图的活动在清单中被声明为纵向视图,尽管相机意图在前面显示的代码中设置为横向:

<activity
        android:theme="@style/AppTheme"
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
</activity>

我正在为静态照片做类似的事情,这就像一个魅力。此代码在模拟器上也可以正常工作,但是在我的设备(Galaxy S3)上进行测试时,它会给出这种行为并且仅适用于视频。我已经搜索了高低的解决方案,但找不到任何东西,任何建议、指针或链接将不胜感激!

【问题讨论】:

标签: android android-intent android-camera android-camera-intent


【解决方案1】:

如果您从 Fragment 调用它,则覆盖 Fragment 中的 Fragment.onActivityResult(),否则您应该期望它来自 Activity.onActivityResult()。出于调试目的,将日志添加到两者。

在 Activity 上不要忘记调用 super.onActivityResult() 否则它可能会抑制 Fragment 中的那个。

【讨论】:

  • 非常感谢您的回复。我的代码位于一个活动 MainActivity 中,所以在这个阶段我不会从片段中调用它,尽管我会记住你在重构后所说的内容。在这个阶段,我只是在努力让应用程序以最基本的形式运行。将修改我的问题以反映活动
猜你喜欢
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
相关资源
最近更新 更多