Android 扫描音乐文件、两种方式获取文件最新修改时间

package com.example.demo_mediascanner;

import java.io.File;
import java.util.Calendar;
import java.util.Date;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;
import android.view.View;
/**
 * 扫描音乐 --scanner music
 * @author alan
 *
 */
public class MainActivity extends Activity {

	private Cursor cursor ;
	Calendar cal = Calendar.getInstance();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

	    IntentFilter intentfilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);
	    intentfilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
	    intentfilter.addDataScheme("file");
	    MediaScannerReceiver receiver = new MediaScannerReceiver();
	    registerReceiver(receiver, intentfilter);  

	    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"

                + Environment.getExternalStorageDirectory())));

	}

	public void scanFileAsync(Context ctx, String filePath) {
		Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
		scanIntent.setData(Uri.fromFile(new File(filePath)));
		ctx.sendBroadcast(scanIntent);
	}

	public void scanner(View view){

		cursor =   getContentResolver().
		query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,null, null,
				MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

		Thread thread = new Thread(){
			int n;
			@Override
			public void run() {	

				while (cursor.moveToNext()) {
					//歌曲的名称 :MediaStore.Audio.Media.TITLE
					String tilte = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
					//歌曲文件的路径 :MediaStore.Audio.Media.DATA
					String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
					//方法1:歌曲文件的修改时间 (注意:精确到秒,所以还要*1000):MediaStore.Audio.Media.DATE_MODIFIED
					long updateTime= cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATE_MODIFIED));
					updateTime = updateTime*1000;
					//方法2:获取最新修改时间
					File file = new File(url);
					long time = file.lastModified();
					//格式化时间,获取年,月,日
					String[] times =  getTimeInfo(updateTime);

//					Log.i("TAG", "tilte:"+tilte);
					Log.i("TAG", "url:"+url);
					Log.i("TAG", "times:"+times[0]+times[1]+times[2]);
					n++;
				}
				Log.i("TAG", "n====>"+n);
				Log.i("TAG", "getCount====>"+cursor.getCount());
			}
		};
		thread.start();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	/**
	 * 获取时间(年月日)
	 * @return
	 */
	public String[] getTimeInfo(long time){
		String[] times  = new String[3];
		Date date = new Date(time);
		cal.setTime(date);
		 times[0] = cal.get(Calendar.YEAR)+"";
         times[1]= (cal.get(Calendar.MONTH)+1)+"";//calendar月份从0-11
         times[2]= cal.get(Calendar.DAY_OF_MONTH)+"";

		return times;
	}

}
时间: 2024-10-10 07:25:43

Android 扫描音乐文件、两种方式获取文件最新修改时间的相关文章

通过编码和xml文件两种方式实现tween动画

tween有四种动画效果:alpha(透明).rotate(旋转), translate(移动),scale(缩放); 可以通过硬编码和xml文件这两种方式来实现. xml实现: 第一步:在项目的res文件下面新建一个文件夹名字是anim(必须) 第二步:在anim文件夹下面新建新的xml文件,在xml文件中具体设置动画效果 第三步:在Activity中使用 AnimationUtils.loadAnimation(MainActivity.this,R.anim.xx);来获取. 1.alph

android图片截取的两种方式

    文章主要提供android系统上拍照图片截取和图片 选择截取 两种方式,适用于app头像选择等环境. 拍照截取 打开相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent,"自定义"); 截图 Intent intent = getCropImageIntent(data); startActivityForResult(intent, "

android菜单创建的两种方式和菜单项添加图标

    菜单创建的两种方式:     1.在xml文件中创建菜单: 具体代码: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.xunfang.menucreate.MainActivity" > //此处创建子菜单 <

android回调接口的两种方式

熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为“回调”).Java的面向对象的模型目前不支持方法指针,似乎不能使用这种方便的机制. 但是java本身拥有interface,我们可以用interface实现相同的效果.在android中,如果我们需要对一个button的点击事件往外传,可以有两种实现方式. 第一种方式的大体步骤是: 1.定义一个回调接口,用来捕捉和“存放”点击事件. public i

VS2017生成DLL文件——两种方式

下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件 姿势一: 第一步:新建一个项目 第二步:选择Windows桌面向导(这里先不要去管上面的“动态链接库(DLL)”)  第三步:选择动态链接库,并空项目打勾√  第四步:添加一个.c源文件 第五步:(因为这里以C语言为例子,将后缀改为.c) 第六步:在c文件中输入一个简单的函数这里的_declspec(dllexport)并不是必须的,后面一种方法将不使用_de

两种方式 获取数据库某个表中所有的数据数量条数

public int getAllEmps(){        //第一种方式 纯JDBC方式//        Connection conn=null;//        PreparedStatement ps=null;//        ResultSet rs=null;//        try {//            conn=C3Pool.getConnection();//            String sql="select count(*) from emp&

(六)两种方式将一个文件的内容复制到另一个文件(第二种方式效率更高,第一种一个字符一个字符的读写,第二种一个数组一个数组的读写)

一:将一个文件复制给另一个文件,每次读取一个字符import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; public class CopyFile { /** * 需求:将一个文件复制给另一个文件 * @param args * @throws Exception */ public static void main(String[] args) throws Exce

两种方式获取Thrift调用的clientIP地址

thrift依赖 <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.9.3</version> </dependency> 方法一: package com.lala.server; import org.apache.thrift.TProcessor; import

用两种方式获取Bitmap的不同结果

---恢复内容开始--- 方式一: InputStream is = getResources().openRawResource(R.drawable.meter_pm25);Bitmap bitmap = BitmapFactory.decodeStream(is); Log.i("Test", bitmap.getByteCount() + "");  结果:672400 方式二: Bitmap bigMeter = ((BitmapDrawable)getR