android 调用系统照相机,保存后回到前一个activity

就像微信那样的在Aactivity的oncrate里面用intent调用系统的照相机,然后进行拍照,当用户点击系统照相机的保存按钮后直接返回到Aactivity里,我现在... 就像微信那样的在A activity 的oncrate里面 用intent 调用系统的照相机,然后进行拍照,当用户点击系统照相机的保存按钮后直接返回到A activity里,
我现在是用户保存图片后,照相机又会重新启动,必须要手动的按3次键盘上的返回键才能回到A activity。
展开
 我来答
百度网友30bb719
2013-03-28 · TA获得超过348个赞
知道小有建树答主
回答量:310
采纳率:75%
帮助的人:209万
展开全部
修改相机源码编译,因为相机返回功能是点2次,保存并没有退出动作,这个不改源码或者在相机源码里面加Intent 是做不到这种效果的 。 我刚想了下,在广播或者Service里面加 OnKeyDown 方法 ,但是广播和service没有这方法,所以不能够靠监听到 返回键的键值 4 ,从而直接 Intent到 A activity的功能就无法实现 ,所以建议修改相机源码,即可实现 。 如果是纯应用, 抱歉,能想的都想了,实现不了。
更多追问追答
追问
那怎么能在A activity  里面用什么方法kill掉照相机的程序    就是startactivity的同时开个线程监视 有没有文件保存, 有保存时,直接kill掉照相机
追答
这个倒是有这方法,你这样,你看看你的相机相片保存在哪,用 File 去这个目录下,判断是否有 图片的数量是不是增加了 , 有增加,在你的线程里面直接运行你自己的应用程序。 顺便说下 要杀死相机的话 , 当增加动作结束后 ,可以尝试使用 exec去做 kill  xxxx, 但是你得知道相机开启的是哪个进程。   exec  先执行  ps  >test    (test是任意名称的文件)  ,然后在执行  cat  test 命令,然后用Stream去每行的读取 ,根据 top 程序即当前运行的相机 ,使用其包名获得  相机 当前的  pid 是多少  , 然后执行 kill   相应的pid   就可杀死, 但是我觉得这样的操作,估计需要 root权限 。 大概思路是这样 , 你可以自己再想想还有没有其他方法。  

不过我觉得你不用去杀死相机 , 直接在线程里面 先启动自己的应用程序,然后finish 自己的应用程序。
向往退休的年轻人g26a9
2013-03-28 · TA获得超过159个赞
知道小有建树答主
回答量:140
采纳率:0%
帮助的人:86.3万
展开全部
private static final int RESULT_CAPTURE_IMAGE = 1;

把下面这段放到oncrate 或者按钮事件函数中
Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File("/mnt/sdcard/test.jpg")));
startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);

下面代码接收相机照相完成的事件
同样写在activity中

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_CAPTURE_IMAGE://拍照
if (resultCode == RESULT_OK) {
Log.v("拍照", "照相完成");
}
break;
}
}
更多追问追答
追问
点保存并不返回。。我用的就是这个方法   resultCode 的返回值一直都是-1 而 requestCode 和 发送过去的值相等
追答

下面是我写的测试Activity的完整代码

package com.example.testcamera;

import java.io.File;

import android.net.Uri;

import android.os.Bundle;

import android.provider.MediaStore;

import android.app.Activity;

import android.content.Intent;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.support.v4.app.NavUtils;

public class MainActivity extends Activity {

private static final int RESULT_CAPTURE_IMAGE = 1;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT,

        Uri.fromFile(new File("/mnt/sdcard/test.jpg")));// /mnt/sdcard/test.jpg 是照片存储目录

        startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            super.onActivityResult(requestCode, resultCode, data);

            switch (requestCode) {

            case RESULT_CAPTURE_IMAGE://拍照

                    if (resultCode == RESULT_OK) {

                    Log.v("拍照", "照相完成");

                    }

                    break;

            }

    }

}

下面是测试过程及截图(Android 4.0)

打开这个Activity  跳转到了下相机界面

点中间的啊按钮,出现以下画面

点右面对号 保存照片

界面回到了我们的Activity

通过re浏览器找到 /mnt/sdcard/ 目录 发现 刚才照得照片 test.jpg

如果你的总返回-1 

你检查下是否存在 /mnt/sdcard/目录 并且目录可写

如果不存在或不可写 你就换个目录

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式