笔记69 | Android获取MP3文件的ID3信息工具类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangyong_1521/article/details/80108595

代码块

HelloJni .java

/*
 =  * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.example.hellojni;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Scanner;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Instrumentation;
import android.app.NotificationManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory; 
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.format.DateFormat;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.location.LocationManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.provider.Settings;


public class HelloJni //extends Activity668842
{ 
    static { 
        System.loadLibrary("hello-jni");
    }

    public static HelloJni pThis;

    public native byte[]  getID3info(String fileName,int index);


    public boolean isChinese(char c) {
        return c >= 0x4E00 && c <= 0x9FA5;
    }

    public boolean isChinese(String str) {
        if (str == null)
            return false;
        for (char c : str.toCharArray()) {
            if (isChinese(c))
                return true; 
        }
        return false;
    }

    public String getID3(String fileName,int index)
    {
        byte[] get_arr = getID3info(fileName,index);

        if(get_arr == null)  return "";

        int arr_len = get_arr[1];

        Log.i("FDebug","getID3----------------textEncoding="+get_arr[0] + " textSize="+get_arr[1]);

        if(arr_len < 1)  return "";

        byte[] info_arr = new byte[arr_len];  

        for(int i=0;i<arr_len;i++)
        {
            info_arr[i] = get_arr[5+i];
        }

        if(info_arr != null)
        {           
            String outStr = "";
            for(int i=0;i<info_arr.length;i++)
            {               
                outStr += " "+Integer.toHexString(info_arr[i]&0xff);
            }

        //  Log.i("FDebug","getID3----------------outStr="+outStr);

            String str = null;
            String info = null;
            try {
                if(get_arr[0] == 0)
                {
                    str = new String(info_arr,"ISO_8859_1");
                    info = new String(str.getBytes("ISO_8859_1"),"gb2312"); 

                    Log.i("FDebug","getID3----------------str="+str);                           
                    Log.i("FDebug","getID3----------------info="+ info);

                    if(isChinese(info))  return info;
                }
                if(get_arr[0] == 1)
                {
                    str = new String(info_arr,"UTF-16");
                    info = new String(str.getBytes("UTF-16"),"gb2312");

                    Log.i("FDebug","getID3----------------str="+str);                           
                    Log.i("FDebug","getID3----------------info="+ info);

                    if(isChinese(info))  return info;   
                }
                if(get_arr[0] == 2)
                {
                    str = new String(info_arr,"UTF-16");
                    info = new String(str.getBytes("UTF-16"),"gb2312"); 

                    Log.i("FDebug","getID3----------------str="+str);                           
                    Log.i("FDebug","getID3----------------info="+ info);

                    if(isChinese(info))  return info;   
                }
                if(get_arr[0] == 3)
                {
                    str = new String(info_arr,"UTF-8");    
                //  info = new String(str.getBytes("UTF-8"),"gb2312");  

                    Log.i("FDebug","getID3----------------str="+str);                           
                    Log.i("FDebug","getID3----------------info="+ info);

                    if(isChinese(info))  return info;   
                }

                return str;

            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }       
        return "";
    }
}

获取:

public String g_Title = "";
    public String g_Artist = "";
    public String g_Album = "";
    public String g_Year = "";
    public void testID3(String fileName)
    {
        g_Title = "";
        g_Artist = "";
        g_Album = "";

        HelloJni f = new HelloJni();
        g_Title = f.getID3(fileName,0);
        g_Artist = f.getID3(fileName,1);
        g_Album = f.getID3(fileName,2);


    }

猜你喜欢

转载自blog.csdn.net/xiangyong_1521/article/details/80108595
今日推荐