1.ÒôƵ ²¥·ÅÓ¦ÓÃ×ÊÔ´ÖеÄÒôÀÖ
Ó¦ÓÃÖеÄÒôÀÖÒ»°ã·ÅÔÚres/rawĿ¼ÏÂ
/** * ²¥·ÅÓ¦ÓÃ×ÊÔ´ÖеÄÒôÀÖ * * @param v */ public void player1(View v) { // ÉèÖò¥·ÅÊý¾ÝÔ´ MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.gm); // ²»ÐèҪ׼±¸,create,´´½¨Íê³ÉÖ±½Ó¿ÉÒÔʹÓò¥·Å mediaPlayer.start();
} |
2.²¥·Å±¾µØÆäËüµØ·½µÄÒôÀÖÎļþÈçSD¿¨ÉϵÄ
/** * ²¥·ÅϵͳÖеÄÒôÀÖ * * @param v */ public void player2(View v) { //ÎļþµØÖ· File file =new File(Environment.getExternalStorageDirectory(),"man.mp3"); //ת»»Îªuri Uri uri = Uri.fromFile(file); // ÉèÖò¥·ÅÊý¾ÝÔ´ MediaPlayer mediaPlayer = MediaPlayer.create(this,uri); // ²»ÐèҪ׼±¸,create,´´½¨Íê³ÉÖ±½Ó¿ÉÒÔʹÓò¥·Å mediaPlayer.start();
} |
ÒÔÉÏÁ½¸ö·½·¨ÓÃÆðÀ´·Ç³£·½±ã,±ãÕâÁ½¸ö·½·¨Ã¿´Î¶¼»á·µ»ØÐ´´½¨µÄMediaplayer¶ÔÏó,ͬʱҲ²»·½±ã¿Ø¼þ²¥·Å״̬.Èç¹ûÐèÒª²¥·Å¶à¸öÒôƵ,ʹÓÃÕâÖÖ·½·¨¾Í²»·½±ã.
¿ÉÒÔʹÓÃMedaiPlayer.setDataSource()·½·¨À´×°ÔØÖ¸¶¨µÄÒôƵÎļþ
3.ʹÓÃMedaiPlayer.setDataSource()À´²¥·ÅÒôÀÖ
²¥·Å
private MediaPlayer mediaPlayer ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mediaPlayer = new MediaPlayer(); }
public void player(View v) {
try {
//³õʼ»¯
mediaPlayer.reset();
//ÉèÖÃ×ÊÔ´
mediaPlayer.setDataSource("/mnt/sdcard/man.mp3");
//×¼±¸ÉùÒô±¾µØ
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
//²¥·Å
mediaPlayer.start();
} |
ÔÝÍ£Óë¼Ì³Ð²¥·Å
private void init(){ mediaPlayer = new MediaPlayer(); } public void player(View v) { try { init(); //³õʼ»¯ mediaPlayer.reset(); //ÉèÖÃ×ÊÔ´ mediaPlayer.setDataSource("/mnt/sdcard/man.mp3"); //×¼±¸ÉùÒô±¾µØ mediaPlayer.prepare(); } catch (Exception e) { e.printStackTrace(); } //²¥·Å mediaPlayer.start(); }
/**
* ÔÝÍ£Óë¼Ì³Ð²¥·Å
* @param v
*/
public void pause(View v){
//ÅжÏ״̬
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
//ÔÝÍ£
mediaPlayer.pause();
}else if(mediaPlayer!=null) {
mediaPlayer.start();
}
}
/**
* ֹͣ
* @param v
*/
public void stop(View v){
//ÅжÏ״̬
if(mediaPlayer!=null){
//Í£Ö¹²¥·Å×ÊÔ´
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
}}
|
4.²¥·ÅÍøÂçÒôÀÖ
private void init(){ mediaPlayer = new MediaPlayer(); } public void player(View v) { //±¾µØTomcat·þÎñÆ÷µÄµØÖ· String url="http://188.188.3.79:8080/itest/gm.mp3"; //²¥·Å,ÍøÂçÒôÀÖ
try {
init();
//³õʼ»¯ http://188.188.3.79:8080/itest/gm.mp3
mediaPlayer.reset();
//ÉèÖÃ×ÊÔ´
mediaPlayer.setDataSource(url);
final ProgressDialog dialog = ProgressDialog.show(this,
"¼ÓÔØÖÐ", "Æ´Ãü¼ÓÔØÖÐ...........");
//×¼±¸ÉùÒôÔ¶³ÌÒôÀÖ
mediaPlayer.prepareAsync();
/**
* ÉèÖüàÌýÆ÷ʲôʱºò»º³å,×¼±¸ºÃÒôÀÖ,
*/
mediaPlayer.setOnPreparedListener(new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp) {
//×¼±¸ºÃÁË,¾Í¶Ô»°¿òÏûʧ
dialog.dismiss();
//¿ªÊ¼²¥·Å
mediaPlayer.start();
}
});
} catch (Exception e) {
e.printStackTrace();
}
} |
Ìí¼ÓȨÏÞ
<uses-permission android:name="android.permission.INTERNET"/> |
5.һЩÒôÀÖÌØÐ§
1.AcousticEchoCanceler:È¡Ïû»ØÉù¿ØÖÆÆ÷
2.AtutomaticGainControl:×Ô¶¯ÔöÒæ¿ØÖÆÆ÷
3.NoiseSupperssor:ÔëÒôÑ¹ÖÆ¿ØÖÆÆ÷
4.BassBoost:ÖØµÍÒô¿ØÖÆÆ÷
5.Equalizer:¾ùºâ¿ØÖÆÆ÷
6.PresetReverb:Ô¤ÉèÒôÉù¿ØÖÆÆ÷
7.Visualizer:ʾ²¨Æ÷
1,2,3Ö»Òªµ÷ÓÃËüÃǵľ²Ì¬·½·¨create()·½·¨´´½¨ÏàÓ¦µÄʵÀý,
È»ºóµ÷ÓÃñ·ÃǵÄisAvailabel()·½·¨ÅжÏÊÇ·ñ¿ÉÓÃ,
ÔÙµ÷ÓÃsetEnable(boolean enabled)·½·¨ÆôÓÃÏàÓ¦µÄЧ¹û¼´¿É
/* ¶¨Òåϵͳ»ØÉù¿ØÖÆÆ÷ */ private void setAcousticEchoCanceler(){ mAcousticEchoCanceler = AcousticEchoCanceler.create(mPlayer.getAudioSessionId()); if(mAcousticEchoCanceler.isAvailable()){ //ÉèÖÃÈ¡Ïû»ØÉù¹¦ÄÜ mAcousticEchoCanceler.setEnabled(true); } } /* ×Ô¶¯ÔöÒæ¿ØÖÆÆ÷ */ private void setAutomaticGainControl(){ mAutomaticGainControl = AutomaticGainControl.create(mPlayer.getAudioSessionId()); if(mAutomaticGainControl.isAvailable()){ //ÆôÓÃ×Ô¶¯ÔöÒæ¹¦ÄÜ mAutomaticGainControl.setEnabled(true); } } /* ÔëÒôÑ¹ÖÆ¿ØÖÆÆ÷ */ private void setNoiseSuppressor(){
mNoiseSuppressor = NoiseSuppressor.create(mPlayer.getAudioSessionId());
if(mNoiseSuppressor.isAvailable()){
//ÆôÓÃÔëÒôÑ¹ÖÆ¹¦ÄÜ
mNoiseSuppressor.setEnabled(true);
}}
|
ºóÃæ4¸ö,ÕßÐèÒªµ÷Óù¹ÔìÆ÷À´´´½¨ÊµÀý,ͬÑùÐèÒªÊäÈëÒ»¸öaudioSession²ÎÊý,ͬÑùÓÃÆôÓÃËüÃÇÐèÒªµ÷ÓÃ
AudioEffect»ùÀàµÄsetEnable(true)·½·¨
6.ʹÓÃSoundPool²¥·ÅÒôЧ
Èç¹ûÓ¦ÓóÌÐò¾³£ÐèÒª²¥·ÅÃܼ¯,¶Ì´ÙµÄÒôЧ,¿ÉÒÔʹÓÃSoundPoolÀ´²¥·Å
Ϊʲô²»Ê¹ÓÃMediaplayer?
ȱµã:
×ÊÔ´Õ¼Óýϸß,ÑÓ³Ùʱ¼ä½Ï³¤
²»Ö§³Ö¶à¸öÒôƵͬʱ²¥·Å
SoundPoolÖ÷ÒªÓÃÓÚ²¥·ÅһЩ½Ï¶ÌµÄÉùÒôƬ¶Î,
ÓëMediaPlayerÏà±È,ÓÅÊÆÔÚCPU×ÊÔ´Õ¼ÓõÍ,·´Ó¦ÑÓ³ÙС
ͬʱ»¹Ö§³ÖÉèÖÃÉùÒôµÄÆ·ÖÊ,ÒôÁ¿,²¥·Å±ÈÌØÂʵȲÎÊý
6.1´´½¨SoundPool
AndroidÖÐÌṩÁËSoundPoolÌṩÁËÒ»¸öBuilderÄÚ²¿Àà,ÓÃÓÚ´´½¨SoundPool
Android5.0ºóSoundPoolĬÈϵĹ¹ÔìÆ÷¹ýʱÁË,½¨ÒéʹÓÃBuilderÀ´´´½¨
²¼¾Ö
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<Button
android:id="@+id/bomb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="²¥·ÅBomb"/>
<Button
android:id="@+id/shot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="²¥·ÅShot"/>
<Button
android:id="@+id/arrow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="²¥·ÅArrow"/>
</LinearLayout> |
Activity
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button bomb;
private Button shot;
private Button arrow;
//¶¨ÒåÒ»¸öSoundPool
private SoundPool soundPool;
//¶¨ÒåÒ»¸öMapÓÃÀ´´æ·ÅÉùÒô
private HashMap<Integer, Integer> soundMap
= new HashMap<Integer, Integer>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bomb = (Button) findViewById(R.id.bomb);
shot = (Button) findViewById(R.id.shot);
arrow = (Button) findViewById(R.id.arrow);
bomb.setOnClickListener(this);
shot.setOnClickListener(this);
arrow.setOnClickListener(this);
AudioAttributes attr = new AudioAttributes.Builder()
//ÉèÖÃÒôЧʹÓõij¡¾°--ÓÎÏ·
.setUsage(AudioAttributes.USAGE_GAME)
//ÉèÖÃÒôЧµÄÀàÐÍ
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
//´´½¨ÉùÒô³Ø
soundPool = new SoundPool.Builder()
//ÉèÖÃÉùÃ÷³ØµÄÊôÐÔ
.setAudioAttributes(attr)
//ÉèÖÃ×î´óÈÝÁ¿
.setMaxStreams(10)
.build();
//¼ÓÔØÖ¸¶¨ÒôƵÎļþʹÓÃload·½·¨
/*
context
the application context
resId
the resource ID
priority
the priority of the sound. Currently has no effect.
Use a value of 1 for future compatibility.
*/
soundMap.put(1, soundPool.load(this, R.raw.bomb,
1));
soundMap.put(2, soundPool.load(this, R.raw.shot,
1));
soundMap.put(3, soundPool.load(this, R.raw.arrow,
1));
}
/**
* µ¥»÷ʼþ¼àÌý
*
* @param view
*/
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.bomb:
/*
soundID
a soundID returned by the load() function
leftVolume
left volume value (range = 0.0 to 1.0)
rightVolume
right volume value (range = 0.0 to 1.0)
priority
stream priority (0 = lowest priority)
loop
loop mode (0 = no loop, -1 = loop forever)
rate
playback rate (1.0 = normal playback, range 0.5
to 2.0
*/
soundPool.play(soundMap.get(1), 1, 1, 0, 0, 1);
break;
case R.id.shot:
soundPool.play(soundMap.get(2), 1, 1, 0, 0, 1);
break;
case R.id.arrow:
soundPool.play(soundMap.get(3), 1, 1, 0, 0, 1);
break;
}
}
} |
7.ʹÓÃVideoView²¥·ÅÊÓÆµ
7.1ʹÓÃvideoView²¥·Å
ÔÚ²¼¾ÖÎļþÖж¨ÒåVideoView¾Í¿ÉÒÔ
<VideoView android:id="@+id/videoview" android:layout_width="match_parent" android:layout_height="match_parent"/> |
ÔÚActivityÔÚÕÒµ½Õâ¸öVideoViewʹÓÃfindViewById,ÉèÖÃ×ÊÔ´¿ªÊ¼²¥·Å
videoView.setVideoPath(); »òÕßvideoView.setVideoURI();À´ÉèÖÃ×ÊÔ´
/*
ÕÒµ½Õâ¸ö¿Ø¼þ
*/
videoView = (VideoView) findViewById(R.id.videoview);
videoView.setVideoPath("/mnt/sdcard/oppo.3gp");
//¿ªÊ¼²¥·Å
videoView.start(); |
ÆÁÄ»Çл» ¼ÌÐø²¥·Å,²»»áÖØÐ¿ªÊ¼
<activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize"> |
ʹÓÃVideoView²¥·Å²»ÄÜ×ö¿ØÖÆ,ÔÝÍ£,Í£Ö¹Ö®ÀàµÄ²Ù×÷
7.2ʹÓÃMediaControllerÓëViewVideo½áºÏʹÓÃ
ÉùÃ÷Ò»¸öMediaController¶ÔÏóÓëViewVideo¶ÔÏó ÉèÖÃÏ໥ÒÀÀµ
//¶¨Òå¿ØÖÆÆ÷ MediaController mediaController = new MediaController(this);
/* ÕÒµ½Õâ¸ö¿Ø¼þ */ videoView = (VideoView) findViewById(R.id.videoview);
/*
ÉèÖÃÏ໥ÒÀÀµ
*/
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setVideoPath("/mnt/sdcard/oppo.3gp");
//¿ªÊ¼²¥·Å ×Ô¶¯²¥·Å
//videoView.start();
//»ñÈ¡½¹µã,ÒªÊÖ¶¯µã»÷²¥·Å²Å¿ÉÒÔ²¥·Å
videoView.requestFocus(); |
startÓërequestFocus()Çø±ð
start:×Ô¶¯¿ªÊ¼²¥·Å
requestFocus:µ±Ç°ÊÓÆµ»ñÈ¡µ½½¹µã,µ«²»²¥·Å,ÒªÊÖ¶¯µã²¥·Å°´¼ü²Å¿ÉÒÔ²¥·Å
8.ʹÓÃMediaPlayerÓëSurfaceViewÀ´²¥·ÅÊÓÆµ
MediaPlayerÖ÷ÒªÊÇÓÃÀ´²¥·ÅÒôƵ,Òò´ËËüûÓÐÌṩͼÏñÊä³ö½çÃæ´Ëʱ¾ÍҪʹÓÃSurfaceViewÀ´ÏÔʾMediaPlayer²¥·ÅµÄͼÏñÊä³ö
1.´´½¨MediaPlayer¶ÔÏó,²¢ÈÃËü¼ÓÔØÖ¸¶¨µÄÊÓÆµÎļþ
2.ÔÚ½çÃæ²¼¾ÖÖж¨ÒåSurfaceView×é¼þ,»òÕßÔÚ³ÌÐòÖд´½¨SurfaceView×é¼þ,²¢ÎªSurfaceViewµÄSurfaceViewÌí¼ÓCallBack¼àÌýÆ÷
3.µ÷ÓÃMediaPlayer¶ÔÏóµÄsetDispay(SurfaceHolder
sh)·½·¨½«Ëù²¥·ÅµÄÊÓÆµÍ¼ÏñÊä³öµ½Ö¸¶¨µÄSurfaceView×é¼þÖÐ
4.µ÷ÓÃMediaPlayer¶ÔÏóµÄstart(),stop(),pause()·½·¨À´¿ØÖÆÊÓÆµµÄ²¥·Å
²¼¾Ö
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center_horizontal"> <ImageButton android:id="@+id/play" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/play" /> <ImageButton android:id="@+id/pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/pause" /> <ImageButton android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/stop" /> </LinearLayout> </RelativeLayout> |
Actvity
/** * ʹÓÃMediaPlayerÓëSurfaceView²¥·ÅÊÓÆµ */ public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private ImageButton play;
private ImageButton pause;
private ImageButton stop;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
³õʼ»¯
*/
mediaPlayer = new MediaPlayer();
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
play = (ImageButton) findViewById(R.id.play);
pause = (ImageButton) findViewById(R.id.pause);
stop = (ImageButton) findViewById(R.id.stop);
play.setOnClickListener(this);
pause.setOnClickListener(this);
stop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pause:
pause();
break;
case R.id.play:
play();
break;
case R.id.stop:
stop();
break;
}
}
/**
* ²¥·Å
*/
private void play() {
File file = new File(Environment.getExternalStorageDirectory(),
"bb.mp4");
Uri uri = Uri.fromFile(file);
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(this, uri);
mediaPlayer.prepare();
//ÉèÖÃÊÓÆµÊä³öµ½SurfaceView
mediaPlayer.setDisplay(surfaceView.getHolder());
//»ñÈ¡´°¿Ú¹ÜÀíÆ÷
WindowManager manager = getWindowManager();
//»ñÈ¡ÆÁÄ»´óС
DisplayMetrics metrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(metrics);
//ÉèÖÃÊÓÆµ±£³Ö×ݺá±ÈÀýËõ·ÅÕ¼Âú Õû¸öÆÁÄ»
surfaceView.setLayoutParams(new RelativeLayout.LayoutParams(metrics.widthPixels,
mediaPlayer.getVideoHeight() * metrics.widthPixels
/ mediaPlayer.getVideoHeight()));
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
/**
* ÔÝÍ£
*/
private void pause() {
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else {
mediaPlayer.start();
}
}
/**
* ֹͣ
*/
private void stop() {
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
}
}
/**
* ¼àÌýÆ÷
*/
private class SurfaceListener implements SurfaceHolder.Callback
{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
play();
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
}
}
} |
9.MediaRecorderÂ¼ÖÆÒôƵ
API
Create a new instance of android.media.MediaRecorder.
Set the audio source using MediaRecorder.setAudioSource().
You will probably want to use MediaRecorder.AudioSource.MIC.
Set output file format using MediaRecorder.setOutputFormat().
Set output file name using MediaRecorder.setOutputFile().
Set the audio encoder using MediaRecorder.setAudioEncoder().
Call MediaRecorder.prepare() on the MediaRecorder instance.
To start audio capture, call MediaRecorder.start().
To stop audio capture, call MediaRecorder.stop(). When
you are done with the MediaRecorder instance, call MediaRecorder.release()
on it. Calling MediaRecorder.release() is always recommended
to free the resource immediately.
½âÊÍ
1.´´½¨Ò»¸öMedaiRecorder¶ÔÏó
2.ÉèÖÃÒôƵԴ,Èç:Âó¿Ë·çMediaRecorder.AudioSource.MIC.
3.ÉèÖÃÊä³öÎļþµÄ¸ñʽ MediaRecorder.setOutputFormat().
4.ÉèÖÃÊä³öÎļþÃû³Æ MediaRecorder.setOutputFile(String
path).
5.ÉèÖÃÂ¼ÖÆÒôƵµÄ±àÂëMediaRecorder.setAudioEncoder().setAudioEncodingRitRate(int
bitRate),setAudioSamplingRate(int samplingRate)ÉèÖÃÒôƵ±àÂë,±àÂëλÂÊ,²ÉÑùÂʵÈ,ÕâЩ¿ÉÒÔ¿ØÖÆÉùÒôµÄÆ·ÖÊ,´óС,Ò»°ãÀ´Ëµ,ÉùÒôÆ·ÖÊÔ½ºÃ,ÎļþÔ½´ó
6.µ÷ÓÃMediaRecorder.prepare()·½·¨×¼±¸Â¼ÖÆ
7.µ÷ÓÃMediaRecorder.stop()·½·¨Í£Ö¹Â¼ÖÆ
8.µ÷ÓÃMediaRecorder.release(),·½·¨ÊÍ·Å×ÊÔ´
²¼¾Ö
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="horizontal"> <ImageButton android:id="@+id/record" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/record" /> <ImageButton android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/stop" /> </LinearLayout> |
Activity
/** * MediaRecord * */ public class MainActivity extends Activity implements View.OnClickListener {
private static final String TAG ="MainActivity"
;
private ImageButton record;
private ImageButton stop;
private File soundFile;
private MediaRecorder mRecorder;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
record = (ImageButton) findViewById(R.id.record);
stop = (ImageButton) findViewById(R.id.stop);
/**
* Ϊ2¸ö°´¼üÉèÖõ¥»÷ʼþ°ó¶¨¼àÌýÆ÷
*/
record.setOnClickListener(this);
stop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.record:
record();
break;
case R.id.stop:
stop();
break;
}
}
/**
* Â¼ÖÆÒôƵ
*/
private void record(){
/**
* ÅжÏSD¿¨ÊÇ·ñÒѾ¹ÒÔØ³É¹¦
*/
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Toast.makeText(MainActivity.this, "SD¿¨Î´³É¹¦¹ÒÔØ,Çë²åÈëSD¿¨",
Toast.LENGTH_SHORT).show();
return;
}
try {
//´´½¨ÒªÂ¼ÖƵÄÎļþ
soundFile = new File(Environment.getExternalStorageDirectory(),+System.currentTimeMillis()+".amr");
Log.d(TAG,Environment.getExternalStorageDirectory()+"");
Log.d(TAG,soundFile.getAbsolutePath());
//´´½¨Â¼ÖÆ
mRecorder = new MediaRecorder();
//ÉèÖÃÉùÒôÀ´Ô´MIC
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//ÉèÖÃÊä³ö¸ñʽ
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//ÉèÖÃÊä³öÎļþ
mRecorder.setOutputFile(soundFile.getPath());
//ÉèÖñàÂë
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//×¼±¸Â¼ÖÆ
mRecorder.prepare();
//Â¼ÖÆ
mRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Í£Ö¹Â¼ÖÆÒôƵ,
*/
private void stop(){
if(soundFile!=null&&soundFile.exists()){
mRecorder.stop();
mRecorder.release();
mRecorder=null;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(soundFile!=null&&soundFile.exists()){
mRecorder.stop();
mRecorder.release();
mRecorder=null;
}
}
} |
ȨÏÞ
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> |
10.µ÷ÓÃÉãÏñÍ·ÅÄÕÕ
Android5.0¶ÔÏóÅÄÕÕµÄAPI½øÐÐÁËȫеÄÉè¼Æ,ÐÂÔöÁËCamera
V2 API,,´ó·ùÌá¸ßÁËÅÄÕÕ¹¦ÄÜ,»¹ÄÜÖ§³ÖRAWÕÕÆ¬µÄÊä,»¹¿ÉÒÔÔÊÐíµ÷ÕûÏà»úµÄ¶Ô½¹,ÆØ¹â,¿ìÃŵÈ.ÕâÀïÖ»ÊǼòµ¥µ÷ÓÃ
²¼¾Ö:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
<Button
android:onClick="capture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ʹÓÃÉãÏñÍ·"/>
<ImageView
android:id="@+id/iv_display"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout> |
Activity
/** ʹÓÃϵͳµÄÏà»ú½øÐÐÅÄÕÕ,²¢ÏÔʾÔÚ½çÃæÉÏ */ public class MainActivity extends AppCompatActivity {
private ImageView display;
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE
= 100;
private Uri fileUri;
private File file;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (ImageView) findViewById(R.id.iv_display);
}
/**
* µ÷ÓÃÉãÏñÍ·
* @param v
*/
public void capture(View v){
// ʹÓÃIntentµÄ·½Ê½È¥´ò¿ªÏµÍ³Ïà»úÓ¦ÓÃ
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
fileUri =Uri.fromFile(file);
// ÉèÖñ£´æÎļþ
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
// Æô¶¯Ò»¸öActivityΪÁËÄõ½½á¹û
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode,
data);
//dataÕâÀïÊÇNUll²»ÄܽøÐÐÅжÏ
if(requestCode==CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE){
//
if(resultCode==RESULT_OK){
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
display.setImageBitmap(bitmap);
}else{
Toast.makeText(MainActivity.this, "ʧ°Ü",
Toast.LENGTH_SHORT).show();
}
}
}
} |
ȨÏÞ
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |
11.¼Ïñ
ÓëÉÏÃæµÄ²½ÖèÒ»Ñù.Ö»ÊǸÄÒ»¸öIntentµÄAction,±£´æÎļþµÄÎļþºó׺
ÏÔʾµÄ»°¿ÉÒÔʹÓÃVideoView,»òÕßSurfaceView ¼òµ¥Ò»µã¾ÍʹÓÃVideoView
²¼¾Ö
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<Button
android:onClick="record"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="¼Ïñ"/>
<VideoView
android:id="@+id/videoview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout> |
Activtity
/** * ʹÓÃÉãÏñ»ú¼Ïñ */ public class MainActivity extends AppCompatActivity { private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200; private VideoView videoView;
private File file;
/*
VideoViewÓëmediaocontroller¿ØÖÆÆ÷
*/
private MediaController mediaController;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = (VideoView) findViewById(R.id.videoview);
}
/**
¿ªÊ¼Â¼Ïñ
*/
public void record(View v){
//µ÷ÓÃÉãÏñÍ·µÄ¼Ïñ¹¦ÄÜ
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
//±£´æµÄÎļþ
file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".mp4");
Uri fileUri =Uri.fromFile(file);
//±£´æÊý¾Ý
intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
//ÆôÓÃÒ»¸öϵͳµÄÏà»ú
startActivityForResult(intent,CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
}
/**
* ½ÓÊÕ½á¹û
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode,
data);
//dataûÓÐÊý¾ÝÊÇNULL
if(requestCode==CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE){
//˵Ã÷³É¹¦
if(resultCode==RESULT_OK){
//ÔÙ´ÎÅÐ¶Ï ÏÂÎļþÊÇ·ñ±£´æ³É¹¦
if(file.exists()){
mediaController = new MediaController(this);
videoView.setVideoPath(file.getAbsolutePath());
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
//»ñÈ¡½¹µã »òÕßÖ±½Ó²¥·Å .start()
videoView.requestFocus();
}else{
Toast.makeText(MainActivity.this, "±£´æÊ§°Ü",
Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(MainActivity.this, "ʧ°Ü",
Toast.LENGTH_SHORT).show();
}
}
}
} |
ȨÏÞ
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |
12.ÆÁÄ»²¶»ñ
ʹÓÃMediaProjectionManager
/** * ²¶×½ÆÁÄ» */ public class MainActivity extends AppCompatActivity {
private static final int CAPTURE_CODE = 100;
private SurfaceView surfaceView;
private int screenDensity;
private Surface surface;
//ÏÔÊ¾ÇøÓòµÄ¿í¸ß
private int displayWidth = 400;
private int displayHeight = 700;
private boolean screenSharing;
private MediaProjection mediaProjection;
private MediaProjectionManager mediaProjectionManager;
private VirtualDisplay virtualDisplay;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = (SurfaceView) findViewById(R.id.surface);
surface = surfaceView.getHolder().getSurface();
// »ñÈ¡ÆÁÄ»·Ö±æÂÊ
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
//»ñÈ¡ÆÁÄ»ÃܶÈ
screenDensity = metrics.densityDpi;
// ¿ØÖƽçÃæÉϵÄSurfaceView×é¼þµÄ¿í¶ÈºÍ¸ß¶È
ViewGroup.LayoutParams lp = surfaceView.getLayoutParams();
lp.width = displayWidth;
lp.height = displayHeight;
// »ñÈ¡MediaProjectionManager¹ÜÀíÆ÷
mediaProjectionManager = (MediaProjectionManager)
getSystemService(Context.MEDIA_PROJECTION_SERVICE);
}
/**
* ²¶×½ÆÁÄ» µ±Óû§µ¥»÷¿ª¹Ø°´Å¥Ê±¼¤·¢¸Ã·½·¨
*
* @param view ¿ª¹Ø
*/
public void onToggleScreenShare(View view) {
if (((ToggleButton) view).isChecked()) {
shareScreen();
} else {
stopScreen();
}
}
/**
* Í£Ö¹¹²Ïí
*/
private void stopScreen() {
screenSharing = false;
if (virtualDisplay == null) {
return;
}
virtualDisplay.release();
}
/**
* ¹²ÏíÆÁÄ»
*/
private void shareScreen() {
screenSharing = true;
if (surface == null) {
return;
}
if (mediaProjection == null) {
//½¨Á¢Ò»¸öÆÁÄ»²¶×½µÄÒâͼ
Intent intent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(intent, CAPTURE_CODE);
return;
}
}
@Override
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode,
data);
if (requestCode == CAPTURE_CODE) {
// Èç¹ûresultCode²»µÈÓÚRESULT_OK£¬±íÃ÷Óû§¾Ü¾øÁËÆÁÄ»²¶×½
if (resultCode != RESULT_OK) {
Toast.makeText(this, "Óû§È¡ÏûÁËÆÁÄ»²¶×½"
, Toast.LENGTH_SHORT).show();
return;
}
mediaProjection = mediaProjectionManager.getMediaProjection(resultCode,data);
/*
public android.hardware.display.VirtualDisplay
createVirtualDisplay(java.lang.String name,
int width,
int height,
int dpi,
int flags,
android.view.Surface surface,
android.hardware.display.VirtualDisplay.Callback
callback,
android.os.Handler handler)
*/
virtualDisplay = mediaProjection.createVirtualDisplay("ÆÁÄ»²¶×½",displayWidth,displayHeight,screenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,surface,null,null);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaProjection != null) {
mediaProjection.stop();
mediaProjection = null;
}
}
} |
13.ʹÓÃSurFace»Í¼
²¼¾Ö
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<SurfaceView
android:layout_centerInParent="true"
android:id="@+id/surfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout> |
Activity
/** * Surface»Ô² */ public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private SurfaceView surfaceview;
private DisplayMetrics metrics;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceview= (SurfaceView) findViewById(R.id.surfaceview);
surfaceview.getHolder().addCallback(new MySureFaceHolad());
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
}
private class MySureFaceHolad implements SurfaceHolder.Callback{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
Log.d(TAG,"surfaceCreated");
new Thread(){
@Override
public void run() {
int radus = 5;
SurfaceHolder holder1 = surfaceview.getHolder();
for (int i = 0; i < 300; i++) {
Canvas canvas = holder1.lockCanvas();
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawCircle(metrics.widthPixels / 2, metrics.heightPixels
/ 2, radus + i, paint);
holder1.unlockCanvasAndPost(canvas);
SystemClock.sleep(20);
}
}
}.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
Log.d(TAG,"surfaceChanged");
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
Log.d(TAG, "surfaceDestroyed");
}
}
} |
һЩעÒâ
1.SureFaceViewÆô¶¯Ê±Õ¼ÓõÄ×ÊÔ´±È½Ï´ó
2.ʹÓÃÁËË«»º³åµÄ»úÖÆ£¬Á½¸öÏ߳̽»ÌæÖ´ÐÐ
3.surfaceViewÕâ¸ö¿Ø¼þ·Ç³£µÄÏûºÄ×ÊÔ´£¬ËùÒÔ£¬ÏµÍ³²»»áÔÙÒ»ÉÏÀ´µÄʱºò¾ÍÂíÉÏÈ¥»æÖÆÕâ¸ö¿Ø¼þ£¬
ÔÚ½çÃæ¿É¼ûÁ˵Äʱºò²ÅÈ¥»æÖÆËü¡£ ËùÒÔÒ»¿ªÊ¼ÉÏÀ´µÃµ½µÄcanvas ÊÇnull .
4.ΪÁ˽â¾ö¸Õ²ÅÕâ¸öÎÊÌ⣬ÎÒÃÇ¿ÉÒÔÑ¡ÔñÐÝÃßỊ̈߳¬ÑÓºóÔÙÖ´ÐУ¬µ«ÊÇÐÝÃß¶àÉÙÄØ£¿
²»¹Ì¶¨£¬
5.Ìí¼ÓÒ»¸ö»Øµ÷¼´¿É
SurfaceHolder holder = sv.getHolder(); holder.addCallback(new Callback() {
//Ïú»Ùʱºòµ÷ÓÃ
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
Log.d(TAG, "surfaceDestroyed---");
}
//´´½¨Ê±ºòµ÷ÓÃ
@Override
public void surfaceCreated(SurfaceHolder holder)
{
}
//״̬·¢Éú¸Ä±äʱµ÷ÓÃ
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width,int height) {
} |
|