安卓,視屏播放示例

AndroidVideo.apk

源碼下載



package com.sc.tool;

import java.io.File;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;


/** AndroidManifest.xml中配置:
 * 
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<activity android:name="com.sc.tool.ShowVideo" 
	android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
	<intent-filter>
	    <action android:name="intent.action.ShowVideo" />
	    <category android:name="android.intent.category.DEFAULT" />
	</intent-filter>
</activity>

*/

/** 展示指定的視屏調用: ShowVideo.Open() */
public class ShowVideo extends Activity
{
	/** 使用當前Activity打開,指定路徑下的視屏文件,
	 * videoPath:可以爲本地文件路徑、或視屏文件網址 */
	public static void Open(Context context, String videoPath)
	{
		if(videoPath.equals("")) return;
		Toast.makeText(context, "播放視屏文件:" + videoPath, Toast.LENGTH_SHORT).show();
		Toast.makeText(context, "待加載完成後,點擊播放", Toast.LENGTH_SHORT).show();
		
		Intent intent = new Intent();
		intent.setAction("intent.action.ShowVideo");
		intent.putExtra("VideoPath", videoPath);
		// intent.setPackage(context.getPackageName());	// 用當前應用中的ShowFile打開
		
		context.startActivity(intent);
	}
	
//	/** 使用當前Activity打開,指定路徑下的視屏文件,
//	 * data:文件對應的Uri */
//	public static void Open(Context context, Uri data)
//	{
//		Intent intent = new Intent();
//		intent.setAction("intent.action.ShowVideo");
//		intent.putExtra("VideoPath", "USE_URI_DATA");
//		
//		intent.setData(data);
//		// intent.setPackage(context.getPackageName());	// 用當前應用中的ShowFile打開
//		
//		context.startActivity(intent);
//	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		
		// 獲取指定的視屏文件並顯示
		Intent intent = this.getIntent();
		String videoPath = intent.getStringExtra("VideoPath");
		
		// 從網址或文件路徑生成Uri
		Uri uri = null;
		/*if(videoPath.equals("USE_URI_DATA"))
		{
			uri = intent.getData();
		}
		else*/
		{
			if(videoPath.startsWith("http://") || videoPath.startsWith("https://"))
			{	// "http://scimence.gitee.io/androidvideo/1.mp4";
				uri = Uri.parse(videoPath);
			}
			else
			{	// "/sdcard/sc/video/tank_zmpy.mp4";
				uri=Uri.fromFile(new File(videoPath));
			}
		}
		
		// 創建視屏播放View
		VideoView videoView = new VideoView(this);
		{
			videoView.setVideoURI(uri);		
			
			MediaController cotrol = new MediaController(this);		// 視屏播放控制器
			
			videoView.setMediaController(cotrol);
			cotrol.setMediaPlayer(videoView);
		}
		
		this.setContentView(videoView);
		
		// 播放下一個、前一個
		//		OnClickListener next = new OnClickListener()
		//		{
		//			@Override
		//			public void onClick(View v)
		//			{
		//				// TODO Auto-generated method stub
		//				
		//			}
		//		};
		//		
		//		cotrol.setPrevNextListeners(next, null);
		
	}
	
}

package com.sc.demo;

import sc.demo.video.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.sc.tool.ShowVideo;


public class MainActivity extends Activity
{
	EditText edit;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		
		this.setContentView(R.layout.activity_main);
		edit = (EditText) this.findViewById(R.id.textWebUrl);
	}
	
	/** 選擇播放本地視屏資源 */
	public void btnLocal_Click(View view)
	{
		Toast.makeText(this, "請選取一個待播放的視屏文件", Toast.LENGTH_SHORT).show();
		selectFile(this, "video/*", true);	// 選取視屏並播放
		
//		ShowVideo.Open(this, "/sdcard/sc/video/tank_zmpy.mp4");	// 播放指定路徑下的視屏
	}
	
	/** 播放網址對應的視屏資源 */
	public void btnWeb_Click(View view)
	{
		String videoPath = edit.getText().toString();
		ShowVideo.Open(this, videoPath);
	}
	
	/** 調用系統方法選擇文件 */
	private void selectFile(Activity context, String type, boolean autoPlay)
	{
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
		intent.setType(type);								// 設置類型,我這裏是任意類型,任意後綴的可以這樣寫。
		intent.addCategory(Intent.CATEGORY_OPENABLE);
		
		if (autoPlay)
			context.startActivityForResult(intent, SELECT);
		else context.startActivityForResult(intent, SELECT_ONLY);
	}
	
	final static int SELECT_ONLY = 3;	// 標記選取
	final static int SELECT = 1;	// 標記選取
	final static int SHARE = 2;		// 標記分享
	
	/** Activity執行結果 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		if (resultCode == Activity.RESULT_OK)
		{
			if (requestCode == SELECT)
			{
				Uri uri = data.getData();
//				ShowVideo.Open(this, uri);	// 打開選取的視屏
				
				String filePath = getPath(this, uri);
				ShowVideo.Open(this, filePath);	// 打開選取的視屏
			}
		}
	}
	
	/** 獲取Uri對應的文件路徑 */
	public static String getPath(Context context, Uri uri)
	{
		try
		{
			if ("content".equalsIgnoreCase(uri.getScheme()))
			{
				String[] projection = { "_data" };
				Cursor cursor = null;
				try
				{
					cursor = context.getContentResolver().query(uri, projection, null, null, null);
					int column_index = cursor.getColumnIndexOrThrow("_data");
					if (cursor.moveToFirst()) 
					{ 
						return cursor.getString(column_index); 
					}
				}
				catch (Exception e)
				{
				}
			}
			else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); }
			return null;
		}
		catch(Exception ex)
		{
			return "";
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章