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 "";
}
}
}