android視頻播放demo
㈠ 跪求一個 android 視頻緩存完整demo(帶進度條)
在做手機開發時,經常碰到一些比較耗時的操作,這個時候進度條就開始派上用場了。 這個demo展示了ProgressBar進度條和ProgressDialog進度框。 一、ProgressDialog進度框,效果如圖所示: 代碼如下: 復制代碼 代碼如下: //進度對話框按鈕監聽 class ProssButtonListener implements OnClickListener { @Override public void onClick(View v) { myDialog = ProgressDialog.show(ProgressbarDemo.this, "進度條標題", "進度條內容", true); new Thread() { public void run() { try { /* 在這里寫上要背景運行的程序片段 */ /* 為了明顯看見效果,以暫停3秒作為示範 */ sleep(3000); } catch (Exception e) { e.printStackTrace(); } finally { // 卸載所創建的myDialog對象。 myDialog.dismiss(); } } }.start(); /* 開始運行運行線程 */ } } 二、進度條對話框,這里用兩種情況來動態顯示進度條刻度 1、handle方法 效果圖如下: 代碼如下: 復制代碼 代碼如下: //進度條handle按鈕監聽 class ProssBarHandleButtonListener implements OnClickListener { @Override public void onClick(View v) { progressBarHandle.setVisibility(View.VISIBLE); myProssBarhandleText.setVisibility(View.VISIBLE); progressBarHandle.setMax(1000); new Thread() { public void run() { for(int i=0;i<=1000;){ try { /* 在這里寫上運行的進度條 */ Message msg = new Message(); msg.what = 1; msg.getData().putInt("size", i); handler.sendMessage(msg);//handle發送消息 /* 為了明顯看見效果,以暫停1秒作為示範 */ sleep(100); i+=10; } catch (Exception e) { handler.obtainMessage(-1).sendToTarget(); e.printStackTrace(); } } } }.start(); /* 開始運行運行線程 */ } } //handle接收消息 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: progressBarHandle.setProgress(msg.getData().getInt("size")); float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax(); int result = (int)(num*100); System.out.println("progressBarHandle.getProgress()======="+progressBarHandle.getProgress()); myProssBarhandleText.setText(result+ "%"); if(progressBarHandle.getProgress()==progressBarHandle.getMax()){ Toast.makeText(ProgressbarDemo.this, "下載成功", 1).show(); progressBarHandle.setVisibility(View.GONE); myProssBarhandleText.setVisibility(View.GONE); } break; case -1: Toast.makeText(ProgressbarDemo.this,"下載失敗", 1).show(); break; } } }; 2、使用AsyncTask方法,效果圖與handle效果一樣 具體代碼如下: 復制代碼 代碼如下: //進度條synctask按鈕監聽 class ProssBarSyncButtonListener implements OnClickListener { @Override public void onClick(View v) { new AsyncLoader().execute((Void)null); } } //AsyncTask 任務執行 class AsyncLoader extends AsyncTask<Void, Integer, Integer> { @Override // 在doInBackground方法執行前執行 protected void onPreExecute(){ progressBarHandle.setVisibility(View.VISIBLE); myProssBarhandleText.setVisibility(View.VISIBLE); progressBarHandle.setMax(100000); } // 做具體的耗時操作 protected Integer doInBackground(Void... params) { //這里以1萬的進度條刻度來顯示 int totalSize = 100000; for (int i = 0; i < 100000; ) { publishProgress(i); //通過推送消息傳遞數據給onProgressUpdate方法執行 i+=10; } return totalSize; } // 在doInBackground方法執行過程中執行 protected void onProgressUpdate(Integer... progress) { progressBarHandle.setProgress(progress[0]); float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax(); int result = (int)(num*100); myProssBarhandleText.setText(result+ "%"); } // 在doInBackground方法結束後執行 protected void onPostExecute(Integer result) { Toast.makeText(ProgressbarDemo.this, "下載成功,下載了"+result, 1).show(); myProssBarhandleText.setVisibility(View.GONE); progressBarHandle.setVisibility(View.GONE); } } 點擊下載DEMO示例
㈡ Android項目視頻播放器例子
InputStream is = getResources().openRawResource(R.id.filename);
調用url的地方也要改下 沒看到代碼 ,你自己改吧,應為用到url的地方是通過訪問網路得到的InputStream,這里已經得到了,很好改的,
希望能幫到你!
㈢ android 如何實現圖片視頻混合播放啊
直接上代碼:
布局文件就是兩個全屏的videoview和imageview重疊
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/pictureView"
android:scaleType="fitXY"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
java部分:
/*
視頻圖片混合展示demo
*/
packagecom.example.administrator.hunbo;
importandroid.content.Context;
importandroid.media.MediaPlayer;
importandroid.net.Uri;
importandroid.os.Handler;
importandroid.os.storage.StorageManager;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.ImageView;
importandroid.widget.Toast;
importandroid.widget.VideoView;
importjava.io.File;
importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
importjava.util.ArrayList;
{
privateVideoViewvideoView;
privateImageViewpictureView;
booleanisPlaying=false;
privateArrayListarrayList=newArrayList<String>();
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();//隱藏actionBar
//初始化控制項
videoView=findViewById(R.id.videoView);
pictureView=findViewById(R.id.pictureView);
//最開始兩個view都是隱藏的
videoView.setVisibility(View.GONE);
pictureView.setVisibility(View.GONE);
//檢測SD卡是否存在
String[]result=null;
StorageManagerstorageManager=(StorageManager)getSystemService(Context.STORAGE_SERVICE);
try{
Methodmethod=StorageManager.class.getMethod("getVolumePaths");
method.setAccessible(true);
try{
result=(String[])method.invoke(storageManager);
}catch(InvocationTargetExceptione){
e.printStackTrace();
}
if(result.length>1){
//Toast.makeText(this,"檢測到U盤",Toast.LENGTH_SHORT).show();
AllFilesPath("/mnt/usb/");
playList();
}else{
Toast.makeText(this,"未檢測到U盤,請在開機前插入U盤,或者重新啟動此應用",Toast.LENGTH_SHORT).show();
Handlerhandler=newHandler();
handler.postDelayed(newRunnable(){
@Override
publicvoidrun(){
finish();
}
},2500);
}
}catch(Exceptione){
e.printStackTrace();
}
}
//獲取所有圖片視頻的絕對路徑到arraylist
privateArrayListAllFilesPath(Stringpath){
Filefile=newFile(path);
File[]files=file.listFiles();
for(Filef:files){
if(f.getName().endsWith("jpg")||f.getName().endsWith("jpeg")||f.getName().endsWith("mp4")
||f.getName().endsWith("avi")||f.getName().endsWith("mkv")||f.getName().endsWith("rmvb")
||f.getName().endsWith("flv")){
System.out.println("------------獲取到了一個可用路徑:"+f.getAbsolutePath());
arrayList.add(f.getAbsolutePath());//添加到arralist
}elseif(f.isDirectory()){
AllFilesPath(f.getAbsolutePath());
}
}
returnarrayList;
}
//依次混合播放arralist里的圖片或視頻
publicintlistNum;
privatevoidplayList(){
if(listNum>=arrayList.size()){
finish();
//listNum=0;
}else{
System.out.println("---------------------------收入路徑---------------------------");
System.out.println("isplaying="+isPlaying);
finalFilef=newFile(arrayList.get(listNum).toString());
if(f.getName().endsWith("jpg")||f.getName().endsWith("jpeg")||f.getName().endsWith("png")){
System.out.println("---------------------------添加了一張圖片:"+f.getAbsolutePath());
pictureView.setVisibility(View.VISIBLE);
pictureView.setImageURI(Uri.fromFile(f));
Handlerhandler=newHandler();
handler.postDelayed(newRunnable(){
@Override
publicvoidrun(){
System.out.println("---------------------------播完了一張位於"+f.getAbsolutePath()+"的圖片》》》》》》》》》》》》》》》》》");
pictureView.setVisibility(View.GONE);
listNum++;
playList();
}
},2000);//2秒後結束當前圖片
}elseif(f.getName().endsWith("mp4")||f.getName().endsWith("avi")||f.getName().endsWith("mkv")
||f.getName().endsWith("rmvb")||f.getName().endsWith("flv")){
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~添加了一個視頻"+f.getAbsolutePath());
videoView.setVideoPath(f.getAbsolutePath());
videoView.setVisibility(View.VISIBLE);//播放之前顯示videoView
videoView.start();
videoView.setOnCompletionListener(newMediaPlayer.OnCompletionListener(){
@Override
publicvoidonCompletion(MediaPlayermp){
System.out.println("---------------------------播完了一個位於"+f.getAbsolutePath()+"的視頻《《《《《《《《《《《《《《《《《《");
videoView.setVisibility(View.GONE);//視頻播放完畢後隱藏videoView
listNum++;
playList();
}
});
}
}
}
㈣ android 實現播放網路視頻
沒有調start(),vv.setVideoURI(uri);後要調用vv.start(),才可以播放,這裡面有好幾個介面,pause,resunme,stop你看下api,建議看下Mediaplayer播放的狀態機,對你理解多媒體播放有好處。
㈤ Android 在線播放視頻
vitamio 能播放絕大部分格式的視頻,但是這個有點大,裡面的so文件比較多,官方文檔上說有瘦身的方法,我試過但是沒成功,就一個用了vitamio 的小Demo,打完包都10M了。在線視頻的話如果在電腦瀏覽器上能直接播放的話,用這個都可以播的,也有緩沖。我們項目也有在線視頻播放,原本也是准備用vitamio 的,但是太大了,打完包apk增加了10M,然後我就換成了universalVideoView 了,這個也可以在線播放,有緩沖效果,主要是打包後apk不大。如果你播放在線視頻功能要求高,而且不在乎APK大小的話可以使用vitamio ,如果僅想實現在線播放的話建議universalVideoView 就夠了!
㈥ 初學者嘗試製作Android視頻播放器,使用videoview無法播放視頻,畫面一片空白。
給你個以前寫的demo吧,隨便看看吧,希望對你有幫助。
㈦ android程序播放音樂和改成放視頻怎麼弄,需要在代碼中怎麼更改在哪裡改
首先新建一個項目命名為Mp3Demo(這個看個人喜好),Activity命名為Mp3Demo。
1.接下來在Mp3Demo.java中輸入以下代碼:
package com.example.mp3demo;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Mp3Demo extends Activity
{ //聲名變數
private Button start=null;
private Button pause=null;
private Button stop=null;
private TextView state=null;
private MediaPlayer mp3;
private Boolean flag=false; //設置標記,false表示正在播放
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_mp3_demo);
//取得各按鈕組件
start=(Button) super.findViewById(R.id.start);
pause=(Button) super.findViewById(R.id.pause);
stop=(Button) super.findViewById(R.id.stop);
state=(TextView)super.findViewById(R.id.state);
//為每個按鈕設置單擊事件
start.setOnClickListener(new OnClickListenerStart());
pause.setOnClickListener(new OnClickListenerPause());
stop.setOnClickListener(new OnClickListenerStop());
mp3= new MediaPlayer(); //創建一個MediaPlayer對象
//在res下新建一個raw文件夾把一首歌放到此文件夾中並用英文命名
mp3 = MediaPlayer.create(Mp3Demo.this,R.raw.sky);
}
//各按鈕單擊事件的實現如下
//開始播放
private class OnClickListenerStart implements OnClickListener{
//implementsOnClickListener為實現OnClickListener介面
@Override
//重寫onClic事件
public void onClick(View v)
{
//執行的代碼,其中可能有異常。一旦發現異常,則立即跳到catch執行。否則不會執行catch裡面的內容
try
{
if (mp3!=null)
{
mp3.stop();
}
mp3.prepare(); //進入到准備狀態
mp3.start(); //開始播放
state.setText("Playing"); //改變輸出信息為「Playing」,下同
} catch (Exception e)
{
state.setText(e.toString());//以字元串的形式輸出異常
e.printStackTrace(); //在控制台(control)上列印出異常
}
}
}
//暫停播放
private class OnClickListenerPause implements OnClickListener{
@Override
public void onClick(View v)
{
try
{
if (flag==false) //若flag為false,則表示此時播放器的狀態為正在播放
{
mp3.pause();
flag=true;
state.setText("pause");
}
else if(flag==true){
mp3.start(); //開始播放
flag=false; //重新設置flag為false
state.setText("Playing");
}
} catch (Exception e)
{
state.setText(e.toString());
e.printStackTrace();
}
}
}
//停止播放
private class OnClickListenerStop implements OnClickListener{
@Override
public void onClick(View v)
{
try
{
if (mp3!=null)
{
mp3.stop();
state.setText("stop");
}
} catch (Exception e)
{
state.setText(e.toString());
e.printStackTrace();
}
}
}
//重寫暫停狀態事件
protected void onPause(){
try
{
mp3.release(); //釋放音樂資源
} catch (Exception e)
{
state.setText(e.toString());
e.printStackTrace();
}
super.onPause();
}
}
2.按下來是定義布局文件,代碼如下:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="start"/>
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="pause"/>
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stop"/>
㈧ android如何實現視頻的在線播放
vitamio
能播放絕大部分格式的視頻,但是這個有點大,裡面的so文件比較多,官方文檔上說有瘦身的方法,我試過但是沒成功,就一個用了vitamio
的小demo,打完包都10m了。在線視頻的話如果在電腦瀏覽器上能直接播放的話,用這個都可以播的,也有緩沖。我們項目也有在線視頻播放,原本也是准備用vitamio
的,但是太大了,打完包apk增加了10m,然後我就換成了universalvideoview
了,這個也可以在線播放,有緩沖效果,主要是打包後apk不大。如果你播放在線視頻功能要求高,而且不在乎apk大小的話可以使用vitamio
,如果僅想實現在線播放的話建議universalvideoview
就夠了!