




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發技術】Android如何選擇圖片或視頻進行循環播放
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
"viders.downloads.documents".equals(uri.getAuthority());
}
/**
*
@param
uri
The
Uri
to
check.
*
@return
Whether
the
Uri
authority
is
MediaProvider.
*/
public
boolean
isMediaDocument(Uri
uri)
{
return
"viders.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
};
/**
*
檢查應用程序是否允許寫入存儲設備
*
<p>
*
<p>
*
<p>
*
如果應用程序不允許那么會提示用戶授予權限
*
*
@param
activity
*/
public
static
void
verifyStoragePermissions(Activity
activity)
{
//
Check
if
we
have
wr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 管理創新方法試題及答案
- 貴州中考語文答案及試題
- 防火培訓試題及答案
- 小院經濟面試題及答案
- 西方國家的電力政策與國際關系試題及答案
- 現代文學小說主題應用題集
- 項目管理中的網絡安全策略試題及答案
- 機電工程流體控制試題匯編
- 軟件設計中的用戶角色分配與試題答案
- 探討2025年機電工程的國際化趨勢試題及答案
- 2025年《安全生產月》活動實施方案 (2份)-61
- 小升初諺語試題及答案
- 福建百校聯考2025屆高三5月高考押題卷-英語試卷(含答案)
- 項目一 動力電池課件 任務4 動力電池性能檢測
- 酒店管理職業素養核心要素
- 裝修陪跑服務合同協議
- 2025年浙江寧波市余姚市糧食收儲有限公司招聘筆試參考題庫附帶答案詳解
- 2025年高考語文作文預測52篇(含范文)
- 2025屆高考政治一輪復習:統編版選擇性必修3《邏輯與思維》知識點考點復習提綱
- 銷售流程管理制度細則
- 心腎綜合征診療實踐指南解讀
評論
0/150
提交評論