Android 广告视频循环播放,Android选择图片或视频进行循环播放

项目要求对本地图片或者视频进行轮播,功能实现完成后发现只是在模拟器上运行ok,后来发现是文件路径的原因。

文件uri的头部有两种一种是以file开头一种是以content开头要进行判断转化

实现如下:

视频 点击吊起文件查看:

private void setVideoPath() {

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("*/*");//设置类型,我这里是任意类型,任意后缀的可以这样写。

intent.addCategory(Intent.CATEGORY_OPENABLE);

startActivityForResult(intent, VIDEO_PATH);

}

在返回中取得选中文件路径

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode != RESULT_OK)

return;

switch (requestCode) {

case VIDEO_PATH:

Uri uri = data.getData();

String path = getPath( uri);

showToastReal("你选中的视频路径:" + path);

SpUtils.getInstace(this).saveString("videoPath", path);

break;

case PIC_PATH:

Uri picUri = data.getData();

String picPath = getPath(picUri);

showToastReal("你选中的图片路径:" + picPath);

SpUtils.getInstace(this).saveString("picPath", picPath);

break;

}

}

public String getPath(Uri uri) {

String path;

if ("file".equalsIgnoreCase(uri.getScheme())) {//使用第三方应用打开

path = uri.getPath();

return path;

}

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后

path = getPath(this, uri);

} else {//4.4以下下系统调用方法

path = getRealPathFromURI(uri);

}

return path;

}

@SuppressLint("NewApi")

public String getPath(final Context context, final Uri uri) {

final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

// DocumentProvider

if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {

// ExternalStorageProvider

if (isExternalStorageDocument(uri)) {

final String docId = DocumentsContract.getDocumentId(uri);

final String[] split = docId.split(":");

final String type = split[0];

if ("primary".equalsIgnoreCase(type)) {

return Environment.getExternalStorageDirectory() + "/" + split[1];

}

}

// DownloadsProvider

else if (isDownloadsDocument(uri)) {

final String id = DocumentsContract.getDocumentId(uri);

final Uri contentUri = ContentUris.withAppendedId(

Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));

return getDataColumn(context, contentUri, null, null);

}

// MediaProvider

else if (isMediaDocument(uri)) {

final String docId = DocumentsContract.getDocumentId(uri);

final String[] split = docId.split(":");

final String type = split[0];

Uri contentUri = null;

if ("image".equals(type)) {

contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

} else if ("video".equals(type)) {

contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

} else if ("audio".equals(type)) {

contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

}

final String selection = "_id=?";

final String[] selectionArgs = new String[]{split[1]};

return getDataColumn(context, contentUri, selection, selectionArgs);

}

}

// MediaStore (and general)

else if ("content".equalsIgnoreCase(uri.getScheme())) {

return getDataColumn(context, uri, null, null);

}

// File

else if ("file".equalsIgnoreCase(uri.getScheme())) {

return uri.getPath();

}

return null;

}

/**

* Get the value of the data column for this Uri. This is useful for

* MediaStore Uris, and other file-based ContentProviders.

*

* @param context The context.

* @param uri The Uri to query.

* @param selection (Optional) Filter used in the query.

* @param selectionArgs (Optional) Selection arguments used in the query.

* @return The value of the _data column, which is typically a file path.

*/

public String getDataColumn(Context context, Uri uri, String selection,

String[] selectionArgs) {

Cursor cursor = null;

final String column = "_data";

final String[] projection = {column};

try {

cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,

null);

if (cursor != null && cursor.moveToFirst()) {

final int column_index = cursor.getColumnIndexOrThrow(column);

return cursor.getString(column_index);

}

} finally {

if (cursor != null)

cursor.close();

}

return null;

}

/**

* @param uri The Uri to check.

* @return Whether the Uri authority is ExternalStorageProvider.

*/

public boolean isExternalStorageDocument(Uri uri) {

return "com.android.externalstorage.documents".equals(uri.getAuthority());

}

/**

* @param uri The Uri to check.

* @return Whether the Uri authority is DownloadsProvider.

*/

public boolean isDownloadsDocument(Uri uri) {

return "com.android.providers.downloads.documents".equals(uri.getAuthority());

}

/**

* @param uri The Uri to check.

* @return Whether the Uri authority is MediaProvider.

*/

public boolean isMediaDocument(Uri uri) {

return "com.android.providers.media.documents".equals(uri.getAuthority());

}

实现视频轮播

public class VideoActivity extends BaseActivity {

@Bind(R.id.sv_ad)

SurfaceView vv;

@Bind(R.id.id_ig_back)

ImageView idIgBack;

private MediaPlayer mPlayer;

private String path;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_video);

ButterKnife.bind(this);

verifyStoragePermissions(this);

init();

// init2();

}

private void init2() {

String path = SpUtils.getInstace(VideoActivity.this).getString("videoPath");

Uri uri = Uri.parse("file://" + path);

try {

MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

mediaPlayer.setDataSource(getApplicationContext(), uri);

mediaPlayer.prepare();

mediaPlayer.start();

} catch (IOException e) {

e.printStackTrace();

}

}

private void init() {

idIgBack.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

finish();

}

});

vv.getHolder().addCallback(new SurfaceHolder.Callback() {

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

if (mPlayer != null) {

mPlayer.stop();

mPlayer.release();

mPlayer = null;

}

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

path = SpUtils.getInstace(VideoActivity.this).getString("videoPath");

try {

if (mPlayer == null) {

mPlayer = MediaPlayer.create(VideoActivity.this, Uri.parse("file://" + path));

}

if(mPlayer==null){

showToastReal("请在个人中心中选择正确的视频");

}

mPlayer.setDisplay(holder);//将SurfaceHolder关联mediaplayer

mPlayer.setLooping(true);

mPlayer.start();

mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

@Override

public boolean onError(MediaPlayer mp, int what,

int extra) {

// TODO Auto-generated method stub

return false;

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format,

int width, int height) {

}

});

}

public void onBack(View view) {

finish();

}

@Override

public void loadNetData() {

}

private static final int REQUEST_EXTERNAL_STORAGE = 1;

private static String[] PERMISSIONS_STORAGE = {

Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.WRITE_EXTERNAL_STORAGE

};

/**

* 检查应用程序是否允许写入存储设备

*

*

*

* 如果应用程序不允许那么会提示用户授予权限

*

* @param activity

*/

public static void verifyStoragePermissions(Activity activity) {

// Check if we have write permission

int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

if (permission != PackageManager.PERMISSION_GRANTED) {

// We don't have permission so prompt the user

ActivityCompat.requestPermissions(

activity,

PERMISSIONS_STORAGE,

REQUEST_EXTERNAL_STORAGE

);

}

}

}

layout的实现

android:orientation="vertical" android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/sv_ad"

android:layout_width="match_parent"

android:layout_height="match_parent" />

android:id="@+id/id_ig_back"

android:layout_width="80dp"

android:layout_height="80dp"

android:layout_marginTop="16dp"

android:padding="16dip"

android:src="@drawable/icon_back_white" />

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值