Android实现调用系统相机录像及实现录音

简介: Android实现调用系统相机录像及实现录音

录像实现原理特别简单,先在配置文件中声明一下权限,这个就不说了,然后直接使用Intent跳转就行。


Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
                                startActivityForResult(intent, 10);


下面是录音的代码,直接上全部代码。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_voice"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/voice"
    tools:context="bhne.com.wlprojectapplication.ui.VoiceActivity">
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <ImageView
            android:id="@+id/imageview_voice"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="80dp"
            android:src="@drawable/timg_voice" />
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="20dp">
            <Button
                android:id="@+id/start"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="50dp"
                android:background="@drawable/shape"
                android:text="开始录音" />
            <Button
                android:id="@+id/stop"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentTop="true"
                android:layout_marginEnd="48dp"
                android:layout_marginRight="200dp"
                android:background="@drawable/shape"
                android:text="停止录音" />
        </RelativeLayout>
    </LinearLayout>
</RelativeLayout>

上面是布局文件,下面是代码。

package bhne.com.wlprojectapplication.ui;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import bhne.com.wlprojectapplication.Common.DBUtil;
import bhne.com.wlprojectapplication.Common.GreenDaoContext;
import bhne.com.wlprojectapplication.Common.RecordPlayer;
import bhne.com.wlprojectapplication.R;
import bhne.com.wlprojectapplication.db.equDao;
import bhne.com.wlprojectapplication.db.pictureDao;
import bhne.com.wlprojectapplication.db.projectDao;
import bhne.com.wlprojectapplication.entity.equ;
import bhne.com.wlprojectapplication.entity.picture;
import bhne.com.wlprojectapplication.entity.project;
public class VoiceActivity extends Activity implements View.OnClickListener {
    private Button start,stop,play,pause_play,stop_play;
    private MediaRecorder mediaRecorder;
    private File recordFile;
    private RecordPlayer player;
    private projectDao ProjectDao;
    private equDao EquDao;
    private String Equ_id;
    private String projectpath;
    private String pathImage;
    private pictureDao PictureDao;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_voice);
        Bundle bundle = this.getIntent().getExtras();
        /*获取Bundle中的数据,注意类型和key*/
        Equ_id = bundle.getString("equid");
        EquDao= DBUtil.getDaoSession(VoiceActivity.this).getEquDao();
        ProjectDao= DBUtil.getDaoSession(VoiceActivity.this).getProjectDao();
        PictureDao= DBUtil.getDaoSession(VoiceActivity.this).getPictureDao();
        equ t1=EquDao.queryBuilder().where(equDao.Properties.Id.eq(Equ_id)).list().get(0);
        project t2=ProjectDao.queryBuilder().where(projectDao.Properties.Id.eq(t1.gcid)).list().get(0);
        projectpath=t2.getName();
        GreenDaoContext ct=new GreenDaoContext();
        String t=java.util.UUID.randomUUID().toString();
        recordFile = new File(ct.getSDPath()+"/bhne/export/"+projectpath+"/", t+".wav");
        pathImage=ct.getSDPath()+"/bhne/export/"+projectpath+"/"+t+".wav";
        init();
        Listener();
    }
    private void init(){
        start=(Button) findViewById(R.id.start);
        stop=(Button) findViewById(R.id.stop);
//        play=(Button) findViewById(R.id.paly);
//        pause_play=(Button) findViewById(R.id.pause_paly);
//        stop_play=(Button) findViewById(R.id.stop_paly);
    }
    private void Listener(){
        start.setOnClickListener(this);
        stop.setOnClickListener(this);
//        play.setOnClickListener(this);
//        pause_play.setOnClickListener(this);
//        stop_play.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
    player=new RecordPlayer(VoiceActivity.this);
        int Id=v.getId();
        switch (Id) {
            case R.id.start:
                startRecording();
                break;
            case R.id.stop:
                stopRecording();
                break;
//            case R.id.paly:
//                playRecording();
//                break;
//            case R.id.pause_paly:
//                pauseplayer();
//                break;
//            case R.id.stop_paly:
//                stopplayer();
//                break;
        }
    }
    private void startRecording() {
        mediaRecorder = new MediaRecorder();
        // 判断,若当前文件已存在,则删除
        if (recordFile.exists()) {
            recordFile.delete();
        }
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        mediaRecorder.setOutputFile(recordFile.getAbsolutePath());
        try {
            Toast.makeText(this,"正在录音",Toast.LENGTH_SHORT).show();
            // 准备好开始录音
            mediaRecorder.prepare();
            mediaRecorder.start();
            start.setEnabled(false);
            stop.setEnabled(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void stopRecording() {
        stop.setEnabled(false);
        start.setEnabled(true);
        picture info=new picture();
      //  info.setId(java.util.UUID.randomUUID().toString());
        info.setEquid(Long.valueOf(Equ_id));
        info.setPicturePath(pathImage);
//                    info.setID(java.util.UUID.randomUUID().toString());
        //加载默认的项目
        final long len = PictureDao.insert(info);
        if(len>0){
            Toast.makeText(getApplicationContext(), "新增语音成功", Toast.LENGTH_SHORT).show();
            Toast.makeText(this,recordFile.toString(),Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(getApplicationContext(), "新增语音失败", Toast.LENGTH_SHORT).show();
        }
        if (recordFile != null) {
            mediaRecorder.stop();
            mediaRecorder.release();
        }
        Intent intent=new Intent(VoiceActivity.this,PictureActivity.class);
        setResult(70,intent);
        finish();
    }
}

就这样。


目录
相关文章
|
3月前
|
Android开发
基于android-11.0.0_r39,系统应用的手动签名方法和过程
本文介绍了基于Android 11.0.0_r39版本进行系统应用手动签名的方法和解决签名过程中遇到的错误,包括处理`no conscrypt_openjdk_jni-linux-x86_64`和`RegisterNatives failed`的问题。
182 2
|
3月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
82 0
|
21天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
46 15
Android 系统缓存扫描与清理方法分析
|
12天前
|
算法 JavaScript Android开发
|
15天前
|
安全 搜索推荐 Android开发
揭秘安卓与iOS系统的差异:技术深度对比
【10月更文挑战第27天】 本文深入探讨了安卓(Android)与iOS两大移动操作系统的技术特点和用户体验差异。通过对比两者的系统架构、应用生态、用户界面、安全性等方面,揭示了为何这两种系统能够在市场中各占一席之地,并为用户提供不同的选择。文章旨在为读者提供一个全面的视角,理解两种系统的优势与局限,从而更好地根据自己的需求做出选择。
38 2
|
23天前
|
安全 搜索推荐 Android开发
深入探索安卓与iOS系统的差异及其对用户体验的影响
在当今的智能手机市场中,安卓和iOS是两大主流操作系统。它们各自拥有独特的特性和优势,为用户提供了不同的使用体验。本文将深入探讨安卓与iOS系统之间的主要差异,包括它们的设计理念、用户界面、应用生态以及安全性等方面,并分析这些差异如何影响用户的使用体验。
|
23天前
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。
|
14天前
|
安全 搜索推荐 程序员
深入探索Android系统的碎片化问题及其解决方案
在移动操作系统的世界中,Android以其开放性和灵活性赢得了广泛的市场份额。然而,这种开放性也带来了一个众所周知的问题——系统碎片化。本文旨在探讨Android系统碎片化的现状、成因以及可能的解决方案,为开发者和用户提供一种全新的视角来理解这一现象。通过分析不同版本的Android系统分布、硬件多样性以及更新机制的影响,我们提出了一系列针对性的策略,旨在减少碎片化带来的影响,提升用户体验。
|
14天前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
16天前
|
安全 Android开发 iOS开发
安卓系统与iOS系统的比较####
【10月更文挑战第26天】 本文将深入探讨安卓(Android)和iOS这两大主流移动操作系统的各自特点、优势与不足。通过对比分析,帮助读者更好地理解两者在用户体验、应用生态、系统安全等方面的差异,从而为消费者在选择智能手机时提供参考依据。无论你是技术爱好者还是普通用户,这篇文章都将为你揭示两大系统背后的故事和技术细节。 ####
37 0