Android 2.2 SDK - Droid X 相机活动无法正常完成

2024-05-20

我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同。在 Droid 和 Nexus One 上选择“确定”后,活动将完成 - Droid X 有一个“完成”按钮(它将带您返回相机,而不是完成活动),并且是到达我想要的屏幕是点击“后退”按钮。

以下是适用于 Android 2.2/2.3 的类,但不适用于 Droid X:

package com.android.xxx;

import java.io.File;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Window;

public class CameraView extends MenusHolder {

    protected String _path;
    protected boolean _taken;

    protected static final String PHOTO_TAKEN = "photo_taken";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.create_event_view);
        /*
         * save to sd
         */
        File imageDirectory = new File(
                Environment.getExternalStorageDirectory() + "/MyPath/");
        imageDirectory.mkdirs();
        /*
         * temp image overwrites each time for space
         */
        _path = Environment.getExternalStorageDirectory()
                + "/MyPath/temporary_image.jpg";
        startCameraActivity();
    }

    protected void startCameraActivity() {
        File file = new File(_path);
        Uri outputFileUri = Uri.fromFile(file);

        Intent intent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(intent, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (resultCode) {
        case 0:
            setResult(5);
            finish();
            break;
        case -1:
            onPhotoTaken();
            break;
        }
    }

    protected void onPhotoTaken() {
        _taken = true;
        setResult(0);
        finish();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(CameraView.PHOTO_TAKEN, _taken);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if (savedInstanceState.getBoolean(CameraView.PHOTO_TAKEN)) {
            onPhotoTaken();
        }
    }

}

我用一个非常非常丑陋的解决方法解决了这个问题。我编写了两个函数来从 SD 卡读取和写入文件(取自此处:http://www.sgoliver.net/blog/?p=2035 http://www.sgoliver.net/blog/?p=2035).

private boolean readFile() {
    try
    {
        File sd_path = Environment.getExternalStorageDirectory();

        File f = new File(sd_path.getAbsolutePath(), "lock_camera_oncreate");

        BufferedReader fin =
            new BufferedReader(
                new InputStreamReader(
                    new FileInputStream(f)));

        String text = fin.readLine();
        fin.close();
        Log.e("Files", "Reading file");
        return true;
    }
    catch (Exception ex)
    {
        Log.e("Files", "Error reading file from SD Card");
        return false;
    }
}

private void createFile() {
    try
    {
        File sd_path = Environment.getExternalStorageDirectory();

        File f = new File(sd_path.getAbsolutePath(), "lock_camera_oncreate");

        OutputStreamWriter fout =
            new OutputStreamWriter(
                new FileOutputStream(f));

        fout.write("Semaphore test.");
        fout.close();
        Log.e("Files", "File writed");
    }
    catch (Exception ex)
    {
        Log.e("Files", "Error reading file from SD Card");
    }

}

然后,在 onCreate 函数中,我这样做:

public void onCreate(Bundle savedInstanceState) {
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    super.onCreate(savedInstanceState);

    if(readFile() == true)
    {
        File sd_path = Environment.getExternalStorageDirectory();
        File f = new File(sd_path.getAbsolutePath(), "lock_camera_oncreate");
        f.delete();

        Intent intent = this.getIntent();
        this.setResult(RESULT_OK, intent);
        return;
    }

    createFile();

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mCurrentImagePath)));
    startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);
}

setRequestedOrientation 调用解决了您在纵向模式下使用应用程序时的问题,但当相机启动时,您将手机置于横向模式,然后拍摄照片。

然后,丑陋的 readFile 东西检查 lock_camera_oncreate 文件是否存在以及是否为真, 然后发生了额外的 onCreate 调用,因此删除文件并从此活动中返回。

如果活动继续进行,则意味着文件尚未创建,并且只有一个相机活动正在运行。

希望它有帮助,它很难看,但对我有用:D

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 2.2 SDK - Droid X 相机活动无法正常完成 的相关文章

  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • Android Studio 与本地网络共享上的项目文件

    这是我的设置 Android Studio 项目文件位于 Ubuntu 14 10 盒子上的共享文件夹中 尝试在 Windows 8 机器上运行 Android Studio 1 0 2 并将 U 驱动器映射到包含项目文件的 Ubuntu
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Dagger 2 没有生成我的组件类

    我正在使用 Dagger 2 创建我的依赖注入 几个小时前它还在工作 但现在不再生成组件 这是我创建组件的地方 public class App extends Application CacheComponent mCacheCompon
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 在命令行上卸载 Android SDK 的选定部分

    这与 卸载旧的 Android SDK 版本 https stackoverflow com questions 15182377 uninstall old android sdk versions 除非我想在无头 Linux CI 服务
  • 没有用于警告的设置器/字段 Firebase 数据库检索数据填充列表视图

    我只是想将 Firebase 数据库中的数据填充到我的列表视图中 日志显示正在检索数据 但适配器不会将值设置为列表中单个列表项中的文本 它只说 没有二传手 场地插入值 这让我觉得我的设置器没有正确制作 但 Android Studio 自动
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A
  • Dagger 2 中“HasFragmentInjector”的实际用法是什么

    我之前已经实现了 dagger2 v2 2 但现在他们也添加了 dagger android 部分 所以我正在用它创建示例项目 我知道旧的方法论 Provide and Modules and 成分等注释 但从 Dagger 2 8 开始
  • Android 屏幕方向错误

    我使用的是 Android HTC HERO 2 1 版本 我写的活动

随机推荐

  • 在 Angular 中使用 Vue 组件

    我有一个用 Vue 构建的项目 我想在 Angular 应用程序中重用 Vue 应用程序中的组件 这样我就不必从头开始重建每个组件 我在medium上看到了这个教程 如何在 Angular 应用程序中使用 Vue 2 0 组件 https
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • CakePHP 查找 - 按字符串到整数排序?

    我想使用 CakePHP 从数据库中提取照片数组 按照片标题排序 0 1 2 3 我的查询当前看起来像 ss photos this gt Asset gt find all array conditions gt array kind g
  • 阻止搜索引擎抓取目录

    我的网站有这样的 URL 最长 结构 http www example com xyz pqr abcd efgh 123 html http www example com xyz pqr abcd efgh 123 html 因此最多有
  • 禁用内容安全策略

    当我开发网站时 我经常想看看特定功能在网站上的外观如何 所以我会使用 chrome 开发者工具并经常运行一些 javascript 脚本 我经常发现一些脚本由于内容安全策略 CSP 而无法运行的问题 我完全理解该策略是为了防止跨站点脚本攻击
  • Azure 服务总线是否可能创建了该消息的副本?

    我们在 Azure 服务总线上遇到了一些奇怪的行为 除了 Azure 中的一些错误之外 我们无法弄清楚如何解释 这就是发生的事情 我们已向 Azure 服务总线发送过一次消息 发送消息的调用执行时间略长于一分钟 但仍然成功 并且此后消息收到
  • 了解时间增量

    鉴于下面的Python代码 请帮助我理解那里发生了什么 start time time time time sleep 42 end time time time uptime end time start time human uptim
  • Google Cloud SQL 上的故障转移如何运作?

    我打算将 PHP 应用程序 从 Google Cloud Platform 外部的服务器 连接到 Google Cloud SQL 我想知道如何设计应用程序以正确地对其数据库进行故障转移 根据manual https cloud googl
  • 来自 file_descriptor_source (boost::iostreams) 或文件的 istream

    我需要为我的程序输入做这样的事情 stream input if decompressed input open filepath else file descriptor popen decompressor filepath r inp
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • 如何在 Android / Java 中获取图像的分辨率

    如何在 Android 中找到任何图像的分辨率 获取存储在磁盘中的图像大小的有效方法 例如获取用户选择上传的图像文件的大小 是使用BitmapFactory Options并设置inJustDecodeBounds为真 这样做你就会获取图像
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • 如何在变量名上使用变量?

    for int f 1 f lt 6 f textBox f 11 loto f ToString 你好 我们又见面了 我正在尝试自学c 抱歉问这个新手问题 更具体地说 这就是我想要的 编写这样的代码的快捷方式 textBox12 Text
  • Azure Blob 存储 URL:WASB:// 与 HTTP://

    我发现有不同类型的 URL 可以访问 Blob 存储 如下所示 wasb email protected cdn cgi l email protection https email protected cdn cgi l email pr
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 使用 Automapper 映射列表

    我有课程 public class Person Props here public class PersonViewModel Props here 然后是清单 List
  • 在 C 中通过引用传递数组

    我是 C 新手 我有一个疑问 由于 C 函数创建其参数的本地副本 我想知道为什么以下代码按预期工作 void function int array array 0 4 array 1 5 array 2 6 int main int arr
  • 用 C# 编写插件或插件框架

    我正在用 C 编写一个 Addin 框架 我想知道如何使 Addin 可以卸载而无需重新启动应用程序 我听说过 AppDomains 但是它们是如何工作的呢 外接程序是否可以添加可扩展性类并通过接口在主应用程序域中调用 并且仍然可卸载并调用
  • angularjs:如何向资源对象添加缓存?

    在 http 中添加缓存非常简单 通过传递cache true http docs angularjs org api ng http https docs angularjs org api ng service 24http有缓存选项
  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回