当前位置: 首页 > 知识库问答 >
问题:

Android相机意图永远不会返回到应用程序

公冶俊达
2023-03-14

我有一个非常令人沮丧的问题。我正在使用Android摄像头启动摄像头并录制视频。

我期望的是:当我按stop时,我想通过onActivityResult返回我的应用程序活动,以执行一些操作,例如显示视频录制的拇指图像等。

发生的情况:当我按下stop时,屏幕会闪烁,好像回到应用程序,但随后会继续显示摄像头。我在ActivityResult中放了一个日志,它再也不会回这里了!请注意,这不是intent data==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)上测试时,它给出了这种行为,并且只用于视频。我已经到处寻找解决方案,但找不到任何东西,任何建议、指针或链接都将不胜感激!!

共有1个答案

裴学
2023-03-14

如果您从片段调用它,请重写片段中的Fragment.onActivityResult(),否则您应该期望它来自Activity.onActivityResult()。出于调试目的,请向两者添加日志。

在活动中,不要忘记调用super.onActivityResult(),否则它可能会抑制片段中的活动。

 类似资料:
  • 我正试着拍一张照片并把它保存到一个自定义的位置- onActivityResult()中的数据为空。我错过了什么?

  • 问题内容: 我试图比较两个相同类型的对象(在dosHave方法中),但是我从未返回过“ true”。这是我的代码: “ Osoba”类如下所示: 来自主代码: 无论我要使用什么输入,这部分都永远不会发生。“ kartoteka”是我当然进口的包裹。每个类都在单独的程序包中,但是使用它们没有问题。我已经尝试了一段时间,但没有任何帮助,似乎 从来都不是真的,但我不知道为什么。没有Boolean.TRU

  • 问题内容: 我正在使用Asp.net MVC3,并尝试在服务器上做一个简单的Ajax发布,它返回部分视图并在搜索过程中更新我的项目列表。 Ajax成功调用服务器,服务器通过发送部分视图进行响应。但是部分视图始终在新页面中呈现。我发现这是因为它不知道即将到来的ajax调用,因此它呈现了一个新页面。 我的控制器代码非常简单: 但是无论如何,Request.IsAjaxRequest()始终返回fals

  • 我目前正在为我的不和谐服务器开发一个discord.py重写(1.3.3)机器人。目前,我正试图让机器人在语音频道中播放音乐。根据discord.py留档,您将使用函数channel.connect()连接到语音通道,该通道将返回VoiceClient对象。 然而,我从未从通道中获得VoiceClient对象。连接()。机器人确实加入了我的频道,但它似乎陷入了一个无限循环。在“wait chann

  • Python的新类型提示功能允许我们键入函数返回的提示… …或保留未指定的返回类型,PEP规定应导致静态分析器假设任何返回类型都是可能的: 任何没有注释的函数都应被视为具有最通用的类型 但是,我应该如何键入函数永远不会返回的提示?例如,键入 hint 这两个函数的返回值的正确方法是什么? 既没有指定

  • 今天我想测试Meteor的android构建是如何工作的。所以我安装了Meteor,并按照他们的说明创建了一个测试待办应用程序。然后,根据这里的公关说明,我安装了Java SDK,并确认我在安装Visual Studio 2015时拥有Android SDK。 然后是我的第一个问题。当我试图从命令提示符运行时。我得到了错误无法找到模块的is属性,并很快学会了通过cd'ing到缺少模块的目录并运行来