手机mp3播放器代码(音乐播放器代码下载)
admin 发布:2022-12-19 16:23 115
本篇文章给大家谈谈手机mp3播放器代码,以及音乐播放器代码下载对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
易语言mp3播放器进度条代码怎么写?
.版本 2
.支持库 wmp9
.支持库 xplib
.程序集 窗口程序集1
.程序集变量 播放器控制, 播放器控制
.程序集变量 播放器位置, 整数型
.程序集变量 播放器媒体, 播放器媒体
.程序集变量 秒数, 整数型
.子程序 __启动窗口_创建完毕
XP风格 (1)
时钟1.时钟周期 = 100
.子程序 _按钮1_被单击
.如果 (通用对话框1.打开 () = 真)
播放器1.地址 = 通用对话框1.文件名
.判断循环首 (播放器1.播放状态 ≠ #播放状态.正在播放)
.如果真 (播放器1.播放状态 ≠ #播放状态.准备新媒体)
返回 ()
.如果真结束
延时 (10)
处理事件 ()
.判断循环尾 ()
播放器控制 = 播放器1.取控制 ()
播放器位置 = 播放器控制.当前位置
播放器媒体 = 播放器1.取当前媒体 ()
秒数 = 到数值 (播放器媒体.取项目信息 (“duration”))
进度条1.最小位置 = 0
进度条1.最大位置 = 秒数
滑块条1.最小位置 = 0
滑块条1.最大位置 = 秒数
.否则
.如果结束
.子程序 _时钟1_周期事件
.判断开始 (播放器控制.是否为空 () = 假)
播放器位置 = 播放器控制.当前位置
进度条1.位置 = 播放器位置
标签1.标题 = 到文本 (播放器位置) + “/” + 到文本 (秒数)
滑块条1.位置 = 播放器位置
.默认
.判断结束
.子程序 _滑块条1_位置被改变
播放器控制.当前位置 = 滑块条1.位置
进度条1.位置 = 滑块条1.位置
QQ空间音乐播放器代码
旋律Qzoner播放器javascript:window.top.space_addItem(6,1228,0,0,200,200,0);
音乐的Qzoner播放器代码javascript:window.top.space_addItem(6,702,0,0,200,200,0);
MP3的Qzoner播放器代码javascript:window.top.space_addItem(6,676,0,0,200,200,0);
水晶年代Qzoner播放器javascript:window.top.space_addItem(6,703,0,0,200,200,0);
吧代码复制到IE栏里回车键、。搞定、上面为你推荐几个免费的播放器。。随便选哦、、
微信平台自动播放MP3代码
1、把录音放到电脑里,之后用电脑登录网页版微信,就可以传送文件了,如果是mp3格式
对方直接在手机就可以听
2、开启任意一种音乐播放器,将你想分享的音乐点击播放;
然后回到主页,找到微信,启动微信,切换到摇一摇页面,别告诉我你连摇一摇的都找不到;
然后将摇一摇里的摇歌曲功能打开,这时候你只需动手摇一摇即可搜出你要分享的音乐;
最后你只需点击右上分享到微信朋友圈足以。
基于Android音乐播放器源代码(正常播放、有列表)
package my.android.players;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
public class mainActivity extends Activity {
private ListString myMusicList=new ArrayListString();
//当前播放歌曲的索引
private int currentListItem=0;
//音乐的路径
private static final String MUSIC_PATH="/sdcard/mp3";
//播放对象
private MediaPlayer myMediaPlayer;
private TextView m_TextView;
//播放按钮
private ImageButton m_start;
private ImageButton m_stop;
private ImageButton m_next;
private ImageButton m_last;
/*设定bIsPaused一开始为false */
private boolean bIsRun = false;
private boolean isplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
myMediaPlayer=new MediaPlayer();
musicList();
m_TextView=(TextView)findViewById(R.id.mtextview);
m_start=(ImageButton)findViewById(R.id.imgbtn_start);
m_stop=(ImageButton)findViewById(R.id.imgbtn_stop);
m_next=(ImageButton)findViewById(R.id.imgbtn_next);
m_last=(ImageButton)findViewById(R.id.imgbtn_last);
listener();
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
currentListItem = bundle.getInt("currentListItem");
isplay=bundle.getBoolean("isplay");
if(isplay==true)
{
bIsRun=false;
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}
}
//监听事件
void listener(){
//开始
m_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try
{
if(myMediaPlayer.isPlaying()==true)
{
myMediaPlayer.pause();
m_start.setImageResource(R.drawable.pause);
}
else
{
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//下一首
m_next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
nextMusic();
}
});
//上一首
m_last.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
lastMusic();
}
});
//停止
m_stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
stopMusic();
}
});
myMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
nextMusic();
}
});
}
//播放音乐
void playMusic(String path){
try {
if(bIsRun==false)
{
myMediaPlayer.reset();
myMediaPlayer.setDataSource(path);
myMediaPlayer.prepare();
myMediaPlayer.start();
/*
* 取出歌曲名的.mp3后缀
* */
String str=(myMusicList.get(currentListItem)).toString();
System.out.println(str);
String str1[]=str.split("\\.");
System.out.println(str1[0]);
m_TextView.setText(str1[0]);
}
else
{
myMediaPlayer.start();
}
m_start.setImageResource(R.drawable.start);
bIsRun=true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//下一首
void nextMusic(){
if(++currentListItem=myMusicList.size()){
currentListItem=0;
}
bIsRun=false;
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}
//上一首
void lastMusic(){
if(--currentListItem0)
currentListItem=myMusicList.size()-1;
bIsRun=false;
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}
//停止
void stopMusic() {
if (myMediaPlayer.isPlaying()) {
m_start.setImageResource(R.drawable.pause);
myMediaPlayer.stop();// 停止
bIsRun=false;
}
else
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}
//当用户返回时结束音乐并释放音乐对象
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK){
new AlertDialog.Builder(mainActivity.this).setTitle("message")
.setIcon(android.R.drawable.dialog_frame)
.setMessage("你确定要离开吗?")
.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
myMediaPlayer.stop();
myMediaPlayer.release();
finish();
}
}).setNegativeButton("取消",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).show();
}
return super.onKeyDown(keyCode, event);
}
/**
* 文件过滤器
*
* @author
*
*/
class MusicFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String filename) {
return (filename.endsWith(".mp3"));
}
}
//绑定音乐
void musicList(){
try{
File home=new File(MUSIC_PATH);
if(!home.exists())
home.mkdirs();
if(home.listFiles(new MusicFilter()).length=0){
for(File file:home.listFiles(new MusicFilter())){
myMusicList.add(file.getName().toString());
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
package my.android.players;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Activity01 extends Activity {
//播放列表
private ListString myMusicList=new ArrayListString();
//当前播放歌曲的索引
private int currentListItem;
//音乐的路径
private static final String MUSIC_PATH="/sdcard/mp3";
//播放列表
private ListView m_ListView;
private boolean isplay=true;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_ListView=(ListView)findViewById(R.id.lv_music);
musicList();
//当选择列表项时播放音乐
m_ListView.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView? arg0, View arg1, int arg2,
long arg3) {
currentListItem = arg2;
Intent intent = new Intent();
Bundle mBundle=new Bundle();
mBundle.putInt("currentListItem", currentListItem);
mBundle.putBoolean("isplay", isplay);
intent.putExtras(mBundle);
intent.setClass(Activity01.this,mainActivity.class);
startActivity(intent);
finish();
}
});
}
/**
* 文件过滤器
*
* @author
*
*/
class MusicFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String filename) {
return (filename.endsWith(".mp3"));
}
}
//绑定音乐
void musicList(){
try{
File home=new File(MUSIC_PATH);
if(!home.exists())
home.mkdirs();
if(home.listFiles(new MusicFilter()).length=0){
for(File file:home.listFiles(new MusicFilter())){
myMusicList.add(file.getName().toString());
}
ArrayAdapterString musicList=new ArrayAdapterString
(Activity01.this,android.R.layout.simple_list_item_1, myMusicList);
m_ListView.setAdapter(musicList);
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
求一网页MP3播放器代码
html
head
titleaboutplayer/title
style
body {
overflow:auto;
font-size:12px;
cursor:default;
background-color: #977E4A;
}
#table01 {
font-size:12px;
background-Color:black;
color:white;
text-align:center;
}
#playListTitle {
background-Color:#001122;
color:white;
font-size:12px;
font-weight:bold;
width:100%;
height:16px;
padding:2px;
}
#playList {
width:150px;
height:225px;
margin:0px;
font-size:12px;
background-Color:black;
color:white;
}
#musicList {
width:200px;
border:buttonface 4px groove;
height:80px;
position:absolute;
right:5px;
top:23px;
left: -1px;
}
#musicListTitle {
font-size:13px;
width:100%;
height:20px;
background-Color:#C5FFC5;
padding:3px;
font-weight:bold;
}
#musicList a {
text-decoration:none;
width:100%;
height:20px;
line-height:20px;
font-szie:20px;
line-height:20px;
padding-top:5px;
padding-left:10px;
}
#musicList a:hover {
background-Color:#E5FFE5;
}
.style1 {
color: #006699;
font-weight: bold;
}
.style2 {font-size: 12px}
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
}
a:hover {
text-decoration: none;
}
a:active {
text-decoration: none;
}
.style4 {font-size: 12px; color: #FFFF33; }
.style7 {font-family: "Times New Roman", Times, serif}
/style
script
function playList_dragOver(){
event.returnValue=false;
}
function playList_dragEnter(){
event.returnValue=false;
event.dataTransfer.dropEffect='link';
}
function addMusic(){
if(event.srcElement.tagName=='A'){
strTxt=event.srcElement.innerText;
strURL=event.srcElement.href;
playList.innerHTML="";
playList.options[0]=new Option(strTxt,strURL);
playList.options[0].selected=true;
}
event.returnValue=false;
playList_dblClick();
return(false);
}
function playList_drop(){
strTxt=unescape(event.dataTransfer.getData('Text').split(":")[0]);
strURL=unescape(event.dataTransfer.getData('Text').split(":")[1]);
playList.options[playList.options.length]=new Option(strTxt,strURL);
}
function playList_keyDown(){
if(event.keyCode==46){
try{
playList.options[playList.options.selectedIndex].outerHTML="";
}catch(e){}
return(false);
}
if(event.keyCode==13){
playList_dblClick();
return(false);
}
}
function playList_dblClick(){
MediaPlayer1.detachEvent("PlayStateChange",checkPlayStatus);
MediaPlayer1.fileName=playList.value;
MediaPlayer1.play();
setTimeout('MediaPlayer1.play();MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus);',1000);
}
function musicList_dragStart(){
if(event.srcElement.tagName=='A'){
event.dataTransfer.setData('Text',escape(event.srcElement.innerText)+":"+escape(event.srcElement.href));
}else{
return(false);
}
}
function init(){
MediaPlayer1.AutoRewind=false;
MediaPlayer1.AutoStart=true;
MediaPlayer1.SendPlayStateChangeEvents=true;
MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus);
}
function checkPlayStatus(oldState,newState){
try{
if(MediaPlayer1.PlayState==0){
MediaPlayer1.detachEvent("PlayStateChange",checkPlayStatus);
MediaPlayer1.stop();
if(playList.options.selectedIndexplayList.options.length-1){
playList.options[playList.options.selectedIndex+1].selected=true;
}else{
playList.options[0].selected=true;
}
MediaPlayer1.fileName=playList.value;
MediaPlayer1.play();
setTimeout('MediaPlayer1.play();MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus);',1000);
}
}catch(e){}
}
/script
script
function doFull()
{
var objId = "MediaPlayer1";
var funcStr = objId + ".displaySize = 3";
eval(funcStr);
}
/script
meta http-equiv="Content-Type" content="text/html; charset=gb2312"body onload="init();"
table id=table01
tr
td
object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" width="286" height="225" STANDBY="Loading Windows Media Player components..." TYPE="application/x-oleobject"
param name="AudioStream" value="-1"
param name="AutoSize" value="-1"
!--是否自动调整播放大小--
param name="AutoStart" value="0"
!--是否自动播放--
param name="AnimationAtStart" value="-1"
param name="AllowScan" value="-1"
param name="AllowChangeDisplaySize" value="-1"
param name="AutoRewind" value="0"
param name="Balance" value="0"
!--左右声道平衡,最左-9640,最右9640--
param name="BaseURL" value
param name="BufferingTime" value="15"
!--缓冲时间--
param name="CaptioningID" value
param name="ClickToPlay" value="-1"
param name="CursorType" value="0"
param name="CurrentPosition" value="0"
!--当前播放进度 -1 表示不变,0表示开头 单位是秒,比如10表示从第10秒处开始播放,值必须是-1.0或大于等于0--
param name="CurrentMarker" value="0"
param name="DefaultFrame" value
param name="DisplayBackColor" value="0"
param name="DisplayForeColor" value="16777215"
param name="DisplayMode" value="0"
param name="DisplaySize" value="0"
!--视频1-50%, 0-100%, 2-200%,3-全屏 其它的值作0处理,小数则采用四舍五入然后按前的处理--
param name="Enabled" value="-1"
param name="EnableContextMenu" value="1"
!-是否用右键弹出菜单控制--
param name="EnablePositionControls" value="-1"
param name="EnableFullScreenControls" value="-1"
param name="EnableTracker" value="-1"
!--是否允许拉动播放进度条到任意地方播放--
param name="Filename" value="" valuetype="ref"
param name="InvokeURLs" value="-1"
param name="Language" value="-1"
param name="Mute" value="0"
!--是否静音--
param name="PlayCount" value="10"
!--重复播放次数,0为始终重复--
param name="PreviewMode" value="-1"
param name="Rate" value="1"
!--播放速度1.0-2.0倍的速度播放--
param name="SAMILang" value
param name="SAMIStyle" value
param name="SAMIFileName" value
!--选择同时播放(伴音)的歌曲--
param name="SelectionStart" value="-1"
param name="SelectionEnd" value="-1"
param name="SendOpenStateChangeEvents" value="-1"
param name="SendWarningEvents" value="-1"
param name="SendErrorEvents" value="-1"
param name="SendKeyboardEvents" value="0"
param name="SendMouseClickEvents" value="0"
param name="SendMouseMoveEvents" value="0"
param name="SendPlayStateChangeEvents" value="-1"
param name="ShowCaptioning" value="0"
!--是否显示字幕,为一块黑色,下面会有一大块黑色,一般不显示--
param name="ShowControls" value="-1"
!--是否显示控制,比如播放,停止,暂停--
param name="ShowAudioControls" value="-1"
!--是否显示音量控制--
param name="ShowDisplay" value="0"
!--显示节目信息,比如版权等--
param name="ShowGotoBar" value="0"
!--一条框,在下面,有往下箭头--
param name="ShowPositionControls" value="-1"
!--是否显示往前往后及列表,如果显示一般也都是灰色不可控制--
param name="ShowStatusBar" value="-1"
!--当前播放信息,显示是否正在播放,及总播放时间和当前播放到的时间--
param name="ShowTracker" value="-1"
!--是否显示当前播放跟踪条,即当前的播放进度条--
param name="TransparentAtStart" value="-1"
param name="VideoBorderWidth" value="0"
!--显示部的宽部,如果小于视频宽,则最小为视频宽,或者加大到指定值,并自动加大高度.此改变只改变四周的黑框大小,不改变视频大小--
param name="VideoBorderColor" value="0"
!--显示黑色框的颜色, 为RGB值,比如ffff00为黄色--
param name="VideoBorder3D" value="0"
param name="Volume" value="0"
!--音量大小,负值表示是当前音量的减值,值自动会取绝对值,最大为0,最小为-9640,最大0--
param name="WindowlessVideo" value="0"
embed src="-1" width="286" height="225" autostart="0" audiostream="-1" autosize="-1" animationatstart="-1" allowscan="-1" allowchangedisplaysize="-1" autorewind="0" balance="0" baseurl="value" bufferingtime="15" captioningid="value" clicktoplay="-1" cursortype="0" currentposition="0" currentmarker="0" defaultframe="value" displaybackcolor="0" displayforecolor="16777215" displaymode="0" displaysize="0" enabled="-1" enablecontextmenu="-1" enablepositioncontrols="-1" enablefullscreencontrols="-1" enabletracker="-1" filename="" invokeurls="-1" language="-1" mute="0" playcount="10" previewmode="-1" rate="1" samilang="value" samistyle="value" samifilename="value" selectionstart="-1" selectionend="-1" sendopenstatechangeevents="-1" sendwarningevents="-1" senderrorevents="-1" sendkeyboardevents="0" sendmouseclickevents="0" sendmousemoveevents="0" sendplaystatechangeevents="-1" showcaptioning="0" showcontrols="-1" showaudiocontrols="-1" showdisplay="0" showgotobar="0" showpositioncontrols="-1" showstatusbar="-1" showtracker="-1" transparentatstart="-1" videoborderwidth="0" videobordercolor="0" videoborder3d="0" volume="0" windowlessvideo="0"/embed
!--如果是0可以允许全屏,否则只能在窗口中查看--
/object
/td
td
div id=playListTitlePlay List:/div
select id=playList size=2 ondragover="playList_dragOver();" ondragenter="playList_dragEnter();"
ondrop="playList_drop();" onkeydown="playList_keyDown();" ondblclick="playList_dblClick();"
/select
/td
/tr
/table
script language="JavaScript1.2"
var dragswitch=0
var nsx
var nsy
var nstemp
function drag_dropns(name){
temp=eval(name)
temp.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
temp.onmousedown=gons
temp.onmousemove=dragns
temp.onmouseup=stopns
}
function gons(e){
temp.captureEvents(Event.MOUSEMOVE)
nsx=e.x
nsy=e.y
}
function dragns(e){
if (dragswitch==1){
temp.moveBy(e.x-nsx,e.y-nsy)
return false
}
}
function stopns(){
temp.releaseEvents(Event.MOUSEMOVE)
}
//drag drop function for IE 4+////
/////////////////////////////////
var dragapproved=false
function drag_dropie(){
if (dragapproved==true){
document.all.showimage.style.pixelLeft=tempx+event.clientX-iex
document.all.showimage.style.pixelTop=tempy+event.clientY-iey
return false
}
}
function initializedragie(){
iex=event.clientX
iey=event.clientY
tempx=showimage.style.pixelLeft
tempy=showimage.style.pixelTop
dragapproved=true
document.onmousemove=drag_dropie
}
if (document.all){
document.onmouseup=new Function("dragapproved=false")
}
////drag drop functions end here//////
function hidebox(){
if (document.all)
showimage.style.visibility="hidden"
else if (document.layers)
document.showimage.visibility="hide"
}
/script
div id="showimage" style="position:absolute; width:500px; left:465px; top:18px; height: 0px;"
table border="0" width="199" cellspacing="0" cellpadding="0"
tr
td width="100%"table border="0" width="100%" cellspacing="0" cellpadding="0"
height="36"
tr
td width="100%" bgcolor="#C6FFC6" style="padding:4px" onMousedown="initializedragie()"ilayer width="100%" onSelectStart="return false"layer width="100%" onMouseover="dragswitch=1;drag_dropns(showimage)" onMouseout="dragswitch=0" class="style1"
div align="left" class="style2"
div align="center"用鼠标按着我拖拖看span class="style7"^o^/span/div
/div
/layer
/ilayer/td
td bgcolor="#00CCFF" style="cursor:hand"stronga href="#" onClick="hidebox();return false"×/a/strong/td
/tr
tr
td width="100%" style="padding:4px" colspan="2"p /p
div id=musicList ondragstart="musicList_dragStart();"
div class="style2" id=musicListTitleAll Music/div
span class="style2"a href="" onclick="addMusic();"麻吉弟弟 甜蜜蜜/abr
a href="" onclick="addMusic();"第一滴泪 - 动力火车/abr
a href="" onclick="addMusic();"半糖主义 - SHE/abr
a href="" onclick="addMusic();"发如雪 - 周杰伦/a/spanbr
hr
span class="style4"Tips: 把歌曲拖入播放列表br
/span
input type="button" class="style2" onclick="doFull();" value="全屏/ESC返回"
/div
/td
/tr
/table
/td
/tr
/table
/div
div id=info/div
body
/html
各种网页播放器代码大全
手机mp3播放器代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于音乐播放器代码下载、手机mp3播放器代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-18贴吧友情链接在哪,手机贴吧怎么看友情贴吧
- 05-17百度手机浏览器,百度手机浏览器官网下载
- 05-16百度推广下载,百度推广客户端手机版下载
- 05-16360搜索首页,360搜索首页 手机版
- 05-16百度下载app下载安装到手机,百度下载app下载安装到手机ios
- 05-16百度手机助手官网下载,百度手机助手官网免费下载
- 05-16手机清理优化软件排名,2020手机清理软件排行
- 05-15手机百度seo怎么优化,百度app如何优化
- 05-14百度账号免费注册,手机注册百度账号 免费
- 05-14手机版百度一下,手机百度2019最新版下载安装
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接