Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
°²×¿µÚÊ®ÁùÌì±Ê¼Ç-ÒôƵÓëÊÓÆµ²¥·Å
 
×÷ÕߣºÉ­ÁÖÉ­ À´×ÔÓÚ£º²©¿ÍÔ° ·¢²¼ÓÚ 2016-4-1
  1978  次浏览      27
 

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) {
}

   
1978 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ