欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器,照相机案例,偷拍案例实现

发布时间:2024/9/27 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器,照相机案例,偷拍案例实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1 编写以下案例:

当点击了播放之后,在手机上的/mnt/sdcard2/natural.mp3就会播放。

2 编写布局文件activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    tools:context=".MainActivity" >

 

    <EditText

        android:id="@+id/et_path"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:hint="请输入要播放文件的路径" />

 

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" >

 

        <Button

            android:id="@+id/bt_play"

            android:onClick="play"

            android:layout_width="0dip"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="播放" />

        <Button

              android:id="@+id/bt_pause"

            android:onClick="pause"

            android:layout_width="0dip"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="暂停" />

        <Button

              android:id="@+id/bt_stop"

            android:onClick="stop"

            android:layout_width="0dip"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="停止" />

        <Button

              android:id="@+id/bt_replay"

            android:onClick="replay"

            android:layout_width="0dip"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="重播" />

    </LinearLayout>

 

</LinearLayout>

3 编写MainActivity

package com.itheima.musicplayer;

 

import java.io.File;

import java.io.IOException;

 

import android.app.Activity;

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.media.MediaPlayer.OnCompletionListener;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

 

public class MainActivity extends Activity {

    private EditText et_path;

   

    private MediaPlayer mediaPlayer;

   

    private Button bt_play,bt_pause,bt_stop,bt_replay;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       et_path = (EditText) findViewById(R.id.et_path);

       bt_play = (Button) findViewById(R.id.bt_play);

       bt_pause = (Button) findViewById(R.id.bt_pause);

       bt_stop = (Button) findViewById(R.id.bt_stop);

       bt_replay = (Button) findViewById(R.id.bt_replay);

    }

    /**

     * 播放

     * @param view

     */

    public void play(View view) {

       String filepath = et_path.getText().toString().trim();

       File file = new File(filepath);

       if(file.exists()){

           try {

              mediaPlayer = new MediaPlayer();

              mediaPlayer.setDataSource(filepath);//设置播放的数据源。

               mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

              mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。

              mediaPlayer.start();

              bt_play.setEnabled(false);

              mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

                  @Override

                  public void onCompletion(MediaPlayer mp) {

                     bt_play.setEnabled(true);

                  }

              });

           } catch (Exception e) {

              e.printStackTrace();

              Toast.makeText(this, "播放失败", 0).show();

           }

       }else{

           Toast.makeText(this, "文件不存在,请检查文件的路径", 0).show();

       }

    }

    /**

     * 暂停

     * @param view

     */

    public void pause(View view) {

       if("继续".equals(bt_pause.getText().toString())){

           mediaPlayer.start();

           bt_pause.setText("暂停");

           return;

       }

       if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

           //这里表示的是暂停功能

           mediaPlayer.pause();

           bt_pause.setText("继续");

       }

    }

   

    /**

     * 停止

     * @param view

     */

    public void stop(View view) {

       if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

           //通过stop方法停止播放音乐

           mediaPlayer.stop();

           mediaPlayer.release();

           mediaPlayer = null;

       }

       bt_pause.setText("暂停");

       bt_play.setEnabled(true);

    }

    /**

     * 重播

     * @param view

     */

    public void replay(View view) {

       if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

           //通过seekTo方法指定到某个位置播放音乐

           mediaPlayer.seekTo(0);

       }else{

           play(view);

       }

       bt_pause.setText("暂停");

    }

}

如果想播放网络上的音乐,需要把上面的play代码改成:

/**

     * 播放

     *

     * @param view

     */

    public void play(View view) {

       String filepath = et_path.getText().toString().trim();

       // http://

       if (filepath.startsWith("http://")) {

           try {

              mediaPlayer = new MediaPlayer();

              mediaPlayer.setDataSource(filepath);// 设置播放的数据源。

               mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

              // mediaPlayer.prepare();//同步的准备方法。

              mediaPlayer.prepareAsync();// 异步的准备

              mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

                  @Override

                  public void onPrepared(MediaPlayer mp) {

                     mediaPlayer.start();

                     bt_play.setEnabled(false);

                  }

              });

              mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

                  @Override

                  public void onCompletion(MediaPlayer mp) {

                     bt_play.setEnabled(true);

                  }

              });

           } catch (Exception e) {

              e.printStackTrace();

              Toast.makeText(this, "播放失败", 0).show();

           }

        } else {

           Toast.makeText(this, "请检查文件的路径", 0).show();

       }

    }

==============================================================================

  • 视频播放器,实现播放暂停停止重播。案例截图如下:

  • 播放布局文件

  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:tools="http://schemas.android.com/tools"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical"

        tools:context=".MainActivity" >

     

        <EditText

            android:id="@+id/et_path"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:hint="请输入要播放文件的路径" />

     

        <SeekBar

            android:id="@+id/seekBar1"

            android:layout_width="match_parent"

            android:layout_height="wrap_content" />

     

        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:orientation="horizontal" >

     

            <Button

                android:id="@+id/bt_play"

                android:layout_width="0dip"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:onClick="play"

                android:text="播放" />

     

            <Button

                android:id="@+id/bt_pause"

                android:layout_width="0dip"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:onClick="pause"

                android:text="暂停" />

     

            <Button

                android:id="@+id/bt_stop"

                android:layout_width="0dip"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:onClick="stop"

                android:text="停止" />

     

            <Button

                android:id="@+id/bt_replay"

                android:layout_width="0dip"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:onClick="replay"

                android:text="重播" />

        </LinearLayout>

     

        <SurfaceView

            android:id="@+id/sv"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent" />

     

    </LinearLayout>

  • 编写MainActivity,代码如下:

  • package com.itheima.musicplayer;

     

    import java.io.File;

    import java.io.IOException;

    import java.util.Timer;

    import java.util.TimerTask;

     

    import android.app.Activity;

    import android.media.AudioManager;

    import android.media.MediaPlayer;

    import android.media.MediaPlayer.OnCompletionListener;

    import android.os.Bundle;

    import android.view.SurfaceHolder;

    import android.view.SurfaceHolder.Callback;

    import android.view.SurfaceView;

    import android.view.View;

    import android.widget.Button;

    import android.widget.EditText;

    import android.widget.SeekBar;

    import android.widget.SeekBar.OnSeekBarChangeListener;

    import android.widget.Toast;

     

    public class MainActivity extends Activity {

        private EditText et_path;

        private MediaPlayer mediaPlayer;

       

        private Button bt_play,bt_pause,bt_stop,bt_replay;

       

        private SurfaceView sv;

        private SurfaceHolder holder;

       

        private int position;

        private String filepath;

     

        private SeekBar seekBar1;

       

        private Timer timer;

        private TimerTask task;

       

        @Override

        protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_main);

           et_path = (EditText) findViewById(R.id.et_path);

           bt_play = (Button) findViewById(R.id.bt_play);

           bt_pause = (Button) findViewById(R.id.bt_pause);

           bt_stop = (Button) findViewById(R.id.bt_stop);

           bt_replay = (Button) findViewById(R.id.bt_replay);

          

           seekBar1 = (SeekBar) findViewById(R.id.seekBar1);

           seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

              

               @Override

               public void onStopTrackingTouch(SeekBar seekBar) {

                  int postion = seekBar.getProgress();

                  mediaPlayer.seekTo(postion);

               }

              

               @Override

               public void onStartTrackingTouch(SeekBar seekBar) {

                 

               }

              

               @Override

               public void onProgressChanged(SeekBar seekBar, int progress,

                      boolean fromUser) {

                 

               }

           });

          

           //得到surfaceview

           sv = (SurfaceView) findViewById(R.id.sv);

           //得到显示界面内容的容器

           holder = sv.getHolder();

           //在低版本模拟器上运行记得加上下面的参数。不自己维护双缓冲区,而是等待多媒体播放框架主动的推送数据。

           holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

           holder.addCallback(new Callback() {

              

               @Override

               public void surfaceDestroyed(SurfaceHolder holder) {

                  System.out.println("destoryed");

                  if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

                      position = mediaPlayer.getCurrentPosition();

                      mediaPlayer.stop();

                      mediaPlayer.release();

                      mediaPlayer = null;

                      timer.cancel();

                      task.cancel();

                      timer = null;

                      task = null;

                  }

               }

              

               @Override

               public void surfaceCreated(SurfaceHolder holder) {

                  System.out.println("created");

                  if(position>0){//记录的有播放进度。

                      try {

                         mediaPlayer = new MediaPlayer();

                         mediaPlayer.setDataSource(filepath);//设置播放的数据源。

                          mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

                         mediaPlayer.setDisplay(holder);

                         mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。

                         mediaPlayer.start();

                         mediaPlayer.seekTo(position);

                         bt_play.setEnabled(false);

                         mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

                             @Override

                             public void onCompletion(MediaPlayer mp) {

                                bt_play.setEnabled(true);

                             }

                         });

                         int max = mediaPlayer.getDuration();

                         seekBar1.setMax(max);

                         timer = new Timer();

                         task = new TimerTask() {

                             @Override

                             public void run() {

                                 seekBar1.setProgress(mediaPlayer.getCurrentPosition());

                             }

                         };

                         timer.schedule(task, 0, 500);

                      } catch (IOException e) {

                         e.printStackTrace();

                      }

                  }

               }

              

               @Override

               public void surfaceChanged(SurfaceHolder holder, int format, int width,

                      int height) {

                  System.out.println("changed");

               }

           });

        }

       

        /**

         * 播放

         * @param view

         */

        public void play(View view) {

           filepath = et_path.getText().toString().trim();

           File file = new File(filepath);

           if(file.exists()){

               try {

                  mediaPlayer = new MediaPlayer();

                  mediaPlayer.setDataSource(filepath);//设置播放的数据源。

                   mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

                  mediaPlayer.setDisplay(holder);

                  mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。

                  mediaPlayer.start();

                  //设置拖动进度条的最大值

                  int max = mediaPlayer.getDuration();

                  seekBar1.setMax(max);

                  timer = new Timer();

                  task = new TimerTask() {

                      @Override

                      public void run() {

                          seekBar1.setProgress(mediaPlayer.getCurrentPosition());

                      }

                  };

                  timer.schedule(task, 0, 500);

                 

                  bt_play.setEnabled(false);

                  mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

                      @Override

                      public void onCompletion(MediaPlayer mp) {

                         bt_play.setEnabled(true);

                      }

                  });

               } catch (Exception e) {

                  e.printStackTrace();

                  Toast.makeText(this, "播放失败", 0).show();

               }

           }else{

               Toast.makeText(this, "文件不存在,请检查文件的路径", 0).show();

           }

        }

        /**

         * 暂停

         * @param view

         */

        public void pause(View view) {

           if("继续".equals(bt_pause.getText().toString())){

               mediaPlayer.start();

               bt_pause.setText("暂停");

               return;

           }

           if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

               mediaPlayer.pause();

               bt_pause.setText("继续");

           }

        }

       

        /**

         * 停止

         * @param view

         */

        public void stop(View view) {

           if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

               mediaPlayer.stop();

               mediaPlayer.release();

               mediaPlayer = null;

           }

           bt_pause.setText("暂停");

           bt_play.setEnabled(true);

        }

       

        /**

         * 重播

         * @param view

         */

        public void replay(View view) {

           if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

               mediaPlayer.seekTo(0);

           }else{

               play(view);

           }

           bt_pause.setText("暂停");

        }

    }

     

    网络视频播放器,编写布局文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:tools="http://schemas.android.com/tools"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical"

        tools:context=".MainActivity" >

     

        <EditText

            android:id="@+id/et_path"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:hint="请输入要播放文件的路径"/>

     

        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:orientation="horizontal" >

     

            <Button

                android:id="@+id/bt_play"

                android:layout_width="0dip"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:onClick="play"

                android:text="播放" />

     

            <Button

                android:id="@+id/bt_pause"

                android:layout_width="0dip"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:onClick="pause"

                android:text="暂停" />

     

            <Button

                android:id="@+id/bt_stop"

                android:layout_width="0dip"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:onClick="stop"

                android:text="停止" />

     

            <Button

                android:id="@+id/bt_replay"

                android:layout_width="0dip"

                android:layout_height="wrap_content"

                android:layout_weight="1"

                android:onClick="replay"

                android:text="重播" />

        </LinearLayout>

     

        <SurfaceView

            android:id="@+id/sv"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent" />

     

    </LinearLayout>

    编写MainActivity

    package com.itheima.musicplayer;

     

    import java.io.File;

    import java.io.IOException;

     

    import android.app.Activity;

    import android.media.AudioManager;

    import android.media.MediaPlayer;

    import android.media.MediaPlayer.OnCompletionListener;

    import android.os.Bundle;

    import android.view.SurfaceHolder;

    import android.view.SurfaceHolder.Callback;

    import android.view.SurfaceView;

    import android.view.View;

    import android.widget.Button;

    import android.widget.EditText;

    import android.widget.Toast;

     

    public class MainActivity extends Activity {

        private EditText et_path;

       

        private MediaPlayer mediaPlayer;

       

        private Button bt_play,bt_pause,bt_stop,bt_replay;

       

        private SurfaceView sv;

        private SurfaceHolder holder;

       

        private int position;

        private String filepath;

     

        @Override

        protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_main);

           et_path = (EditText) findViewById(R.id.et_path);

           bt_play = (Button) findViewById(R.id.bt_play);

           bt_pause = (Button) findViewById(R.id.bt_pause);

           bt_stop = (Button) findViewById(R.id.bt_stop);

           bt_replay = (Button) findViewById(R.id.bt_replay);

           //得到surfaceview

           sv = (SurfaceView) findViewById(R.id.sv);

           //得到显示界面内容的容器

           holder = sv.getHolder();

           //在低版本模拟器上运行记得加上下面的参数。不自己维护双缓冲区,而是等待多媒体播放框架主动的推送数据。

           holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

           holder.addCallback(new Callback() {

              

               @Override

               public void surfaceDestroyed(SurfaceHolder holder) {

                  System.out.println("destoryed");

                  if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

                      position = mediaPlayer.getCurrentPosition();

                      mediaPlayer.stop();

                      mediaPlayer.release();

                      mediaPlayer = null;

                  }

               }

              

               @Override

               public void surfaceCreated(SurfaceHolder holder) {

                  System.out.println("created");

                  if(position>0){//记录的有播放进度。

                      try {

                         mediaPlayer = new MediaPlayer();

                         mediaPlayer.setDataSource(filepath);//设置播放的数据源。

                          mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

                         mediaPlayer.setDisplay(holder);

                         mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。

                         mediaPlayer.start();

                         mediaPlayer.seekTo(position);

                         bt_play.setEnabled(false);

                         mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

                             @Override

                             public void onCompletion(MediaPlayer mp) {

                                bt_play.setEnabled(true);

                             }

                         });

                      } catch (IOException e) {

                         e.printStackTrace();

                      }

                  }

               }

              

               @Override

               public void surfaceChanged(SurfaceHolder holder, int format, int width,

                      int height) {

                  System.out.println("changed");

               }

           });

          

        }

        /**

         * 播放

         * @param view

         */

        public void play(View view) {

           filepath = et_path.getText().toString().trim();

           //File file = new File(filepath);

           if(filepath.startsWith("http://")){

               try {

                  mediaPlayer = new MediaPlayer();

                   mediaPlayer.setDataSource(filepath);//设置播放的数据源。

                   mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

                  mediaPlayer.setDisplay(holder);

                  mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。

                  mediaPlayer.start();

                  bt_play.setEnabled(false);

                  mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

                      @Override

                      public void onCompletion(MediaPlayer mp) {

                         bt_play.setEnabled(true);

                      }

                  });

               } catch (Exception e) {

                  e.printStackTrace();

                  Toast.makeText(this, "播放失败", 0).show();

               }

           }else{

               Toast.makeText(this, "文件不存在,请检查文件的路径", 0).show();

           }

        }

        /**

         * 暂停

         * @param view

         */

        public void pause(View view) {

           if("继续".equals(bt_pause.getText().toString())){

               mediaPlayer.start();

               bt_pause.setText("暂停");

               return;

           }

           if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

               mediaPlayer.pause();

               bt_pause.setText("继续");

           }

        }

        /**

         * 停止

         * @param view

         */

        public void stop(View view) {

           if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

               mediaPlayer.stop();

               mediaPlayer.release();

               mediaPlayer = null;

           }

           bt_pause.setText("暂停");

           bt_play.setEnabled(true);

        }

        /**

         * 重播

         * @param view

         */

        public void replay(View view) {

           if(mediaPlayer!=null&&mediaPlayer.isPlaying()){

               mediaPlayer.seekTo(0);

           }else{

               play(view);

           }

           bt_pause.setText("暂停");

        }

     

    }

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"

        package="com.itheima.musicplayer"

        android:versionCode="1"

        android:versionName="1.0" >

     

        <uses-sdk

            android:minSdkVersion="8"

            android:targetSdkVersion="19" />

        <!-- 注意如果涉及到网络的都要添加上下面的一句 -->

        <uses-permission android:name="android.permission.INTERNET"/>

     

        <application

            android:allowBackup="true"

            android:icon="@drawable/ic_launcher"

            android:label="@string/app_name"

            android:theme="@style/AppTheme" >

            <activity

                android:name="com.itheima.musicplayer.MainActivity"

                android:label="@string/app_name" >

                <intent-filter>

                    <action android:name="android.intent.action.MAIN" />

     

                    <category android:name="android.intent.category.LAUNCHER" />

                </intent-filter>

            </activity>

        </application>

     

    </manifest>

     

    照相机引用,如果想使用模拟器进行拍照,需要制定模拟器的一个设置,设置如下图:

    编写以下案例,当点击拍照之后弹出权限提示框。

    1 编写布局文件activity_main.xml,代码如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:tools="http://schemas.android.com/tools"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical"

        tools:context=".MainActivity" >

     

        <Button

            android:onClick="click"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="拍照" />

       

        <ImageView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:id="@+id/iv"/>

       

    </LinearLayout>

    1 MainActivity的代码如下:

    package com.itheima.camera;

     

    import java.io.File;

     

    import android.app.Activity;

    import android.content.Intent;

    import android.net.Uri;

    import android.os.Bundle;

    import android.os.Environment;

    import android.provider.MediaStore;

    import android.util.Log;

    import android.view.View;

    import android.widget.ImageView;

     

    /**

     * 拍照的实例代码

     * @author toto

     */

    public class MainActivity extends Activity {

             private ImageView iv;

             private File file;

            

             @Override

             protected void onCreate(Bundle savedInstanceState) {

                       super.onCreate(savedInstanceState);

                       setContentView(R.layout.activity_main);

                      

                       iv = (ImageView) findViewById(R.id.iv);

             }

            

             /**

              * 当点击之后的效果

              * @param view

              */

             public void click(View view) {

                       Intent intent = new Intent();

                       //指定拍照的意图ACTION_IMAGE_CAPTURE,如果是录像的可以用ACTION_VIDEO_CAPTURE,并且将文件后缀改成.3gp

                       intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

                       Log.i("FILE-PATH", Environment.getExternalStorageDirectory().toString());

                       //第一个参数是文件路径,第二个参数表示的是文件名称

                       file =  new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");

                       //指定保存文件的路径

                       intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));

                       //开启一个新的action,并且获得其返回值

                       startActivityForResult(intent, 100);

             }

            

             /**

              * startActivityForResult返回结果的时候会执行下面的函数

              */

             @Override

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

                       if (resultCode == 100) {

                                iv.setImageURI(Uri.fromFile(file));

                       }

                       super.onActivityResult(requestCode, resultCode, data);

             }

    }

    若是手机,例如我的手机,存储在/sdcard/emulated/0中。

    ===============================================================================

    偷拍的案例,编写如下案例(将下面的图片显示区域变得很小可以实现偷拍功能):

    1 编写布局文件activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:tools="http://schemas.android.com/tools"

        android:layout_width="match_parent"

        android:orientation="vertical"

        android:layout_height="match_parent"

        tools:context=".MainActivity" >

     

        <Button

            android:onClick="click"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="拍照"/>

       

        <FrameLayout

             android:id="@+id/camera_preview"

             android:layout_width="100dip"

             android:layout_height="100dip"/>

       

        <ImageView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:id="@+id/iv"/>

       

    </LinearLayout>

    2 CameraPreview的代码如下:

    package com.itheima.camera2;

     

    import java.io.IOException;

     

    import android.content.Context;

    import android.hardware.Camera;

    import android.util.Log;

    import android.view.SurfaceHolder;

    import android.view.SurfaceView;

     

    /** A basic Camera preview class */

    public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {

        private static final String TAG = "CameraPreview";

        private SurfaceHolder mHolder;

        private Camera mCamera;

     

        @SuppressWarnings("deprecation")

        public CameraPreview(Context context, Camera camera) {

            super(context);

            mCamera = camera;

     

            // Install a SurfaceHolder.Callback so we get notified when the

            // underlying surface is created and destroyed.

            mHolder = getHolder();

            mHolder.addCallback(this);

            // deprecated setting, but required on Android versions prior to 3.0

            mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        }

     

        public void surfaceCreated(SurfaceHolder holder) {

            // The Surface has been created, now tell the camera where to draw the preview.

            try {

                mCamera.setPreviewDisplay(holder);

                mCamera.startPreview();

            } catch (IOException e) {

                Log.d(TAG, "Error setting camera preview: " + e.getMessage());

            }

        }

     

        public void surfaceDestroyed(SurfaceHolder holder) {

            // empty. Take care of releasing the Camera preview in your activity.

        }

     

        public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

            // If your preview can change or rotate, take care of those events here.

            // Make sure to stop the preview before resizing or reformatting it.

     

            if (mHolder.getSurface() == null){

              // preview surface does not exist

              return;

            }

     

            // stop preview before making changes

            try {

                mCamera.stopPreview();

            } catch (Exception e){

              // ignore: tried to stop a non-existent preview

            }

     

            // set preview size and make any resize, rotate or

            // reformatting changes here

     

            // start preview with new settings

            try {

                mCamera.setPreviewDisplay(mHolder);

                mCamera.startPreview();

     

            } catch (Exception e){

                Log.d(TAG, "Error starting camera preview: " + e.getMessage());

            }

        }

    }

  • MainActivity的代码如下:

  • package com.itheima.camera2;

     

    import java.io.File;

    import java.io.FileOutputStream;

     

    import android.app.Activity;

    import android.hardware.Camera;

    import android.hardware.Camera.AutoFocusCallback;

    import android.hardware.Camera.PictureCallback;

    import android.os.Bundle;

    import android.os.SystemClock;

    import android.view.View;

    import android.widget.FrameLayout;

    import android.widget.ImageView;

    import android.widget.Toast;

     

    public class MainActivity extends Activity {

        private ImageView iv;

        private Camera mCamera;

        private CameraPreview mPreview;

     

        @Override

        protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_main);

           iv = (ImageView) findViewById(R.id.iv);

            // Create an instance of Camera

            mCamera = getCameraInstance();

            // Create our Preview view and set it as the content of our activity.

            mPreview = new CameraPreview(this, mCamera);

            FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);

            preview.addView(mPreview);

        }

       

        public void click(View view){

           mCamera.autoFocus(new AutoFocusCallback() {

               @Override

               public void onAutoFocus(boolean success, Camera camera) {

                  mCamera.takePicture(null, null, new PictureCallback() {

                      @Override

                      public void onPictureTaken(byte[] data, Camera camera) {

                         try {

                             //File file = new File(Environment.getExternalStorageDirectory(),SystemClock.uptimeMillis()+".jpg");

                             File file = new File("/mnt/sdcard2",SystemClock.uptimeMillis()+".jpg");

                             FileOutputStream fos = new FileOutputStream(file);

                             fos.write(data);

                             fos.close();

                             Toast.makeText(getApplicationContext(), "成功", 0).show();

                             mCamera.startPreview();

                         } catch (Exception e) {

                             e.printStackTrace();

                         }

                      }

                  });

               }

           });

          

           

        }

       

        /** 获取一个照相机实例 */

        public static Camera getCameraInstance(){

            Camera c = null;

            try {

                c = Camera.open(); // attempt to get a Camera instance

            }

            catch (Exception e){

                // Camera is not available (in use or does not exist)

            }

            return c; // returns null if camera is unavailable

        }

       

        @Override

        protected void onDestroy() {

           mCamera.stopPreview();

           mCamera.release();

           mCamera = null;

           super.onDestroy();

        }

    }

  • 编写AndroidManifest.xml的清单文件,代码如下:

  • <?xml version="1.0" encoding="utf-8"?>

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"

        package="com.itheima.camera2"

        android:versionCode="1"

        android:versionName="1.0" >

     

        <uses-sdk

            android:minSdkVersion="8"

            android:targetSdkVersion="19" />

       

       <uses-permission android:name="android.permission.CAMERA" />

        <uses-feature android:name="android.hardware.camera" />

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

     

        <application

            android:allowBackup="true"

            android:icon="@drawable/ic_launcher"

            android:label="@string/app_name"

            android:theme="@style/AppTheme" >

            <activity

                android:name="com.itheima.camera2.MainActivity"

                android:label="@string/app_name" >

                <intent-filter>

                    <action android:name="android.intent.action.MAIN" />

     

                    <category android:name="android.intent.category.LAUNCHER" />

                </intent-filter>

            </activity>

        </application>

     

    </manifest>

     

    

    总结

    以上是生活随笔为你收集整理的22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器,照相机案例,偷拍案例实现的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。