android 调用系统照相机,保存后回到前一个activity
我现在是用户保存图片后,照相机又会重新启动,必须要手动的按3次键盘上的返回键才能回到A activity。 展开
那怎么能在A activity 里面用什么方法kill掉照相机的程序 就是startactivity的同时开个线程监视 有没有文件保存, 有保存时,直接kill掉照相机
这个倒是有这方法,你这样,你看看你的相机相片保存在哪,用 File 去这个目录下,判断是否有 图片的数量是不是增加了 , 有增加,在你的线程里面直接运行你自己的应用程序。 顺便说下 要杀死相机的话 , 当增加动作结束后 ,可以尝试使用 exec去做 kill xxxx, 但是你得知道相机开启的是哪个进程。 exec 先执行 ps >test (test是任意名称的文件) ,然后在执行 cat test 命令,然后用Stream去每行的读取 ,根据 top 程序即当前运行的相机 ,使用其包名获得 相机 当前的 pid 是多少 , 然后执行 kill 相应的pid 就可杀死, 但是我觉得这样的操作,估计需要 root权限 。 大概思路是这样 , 你可以自己再想想还有没有其他方法。
不过我觉得你不用去杀死相机 , 直接在线程里面 先启动自己的应用程序,然后finish 自己的应用程序。
把下面这段放到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/目录 并且目录可写
如果不存在或不可写 你就换个目录