Android 读外存音频

import ...

public class MainActivity extends AppCompatActivity {

    //存放歌曲信息的类
    private class SongDetail {
        public String mFileName;
        public String mSinger;
        public int mDuration;
        public String mFileUrl;

        @Override
        public String toString() {
            return "SongDetail[" +
                    "Duration=" + mDuration +
                    ", FileName='" + mFileName + '\'' +
                    ", Singer='" + mSinger + '\'' +
                    ", FileUrl='" + mFileUrl + '\'' +
                    ']';
        }
    }
    //MsG:设置文本显示 的标识码
    private static int LOADING_SONG_DETAIL = 0X54;
    //请求读外存权限 的标识码
    private static int READ_EXTERN_STORE_RECODE = 0X55;

    private ArrayList<SongDetail> mSongDetailDetails = null;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == LOADING_SONG_DETAIL) {
                TextView tv = (TextView) findViewById(R.id.songdetail_tv);
                tv.setMovementMethod(ScrollingMovementMethod.getInstance());
                if (mSongDetailDetails == null)
                    return;
                tv.setText("");
                for (int i = 0; i < mSongDetailDetails.size(); ++i)
                    tv.append(mSongDetailDetails.get(i).toString() + "\n\n");
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initBtnNotifyer(); //这个与该项目无关,之前的笔记代码留着看
        //动态申请权限
        if (ContextCompat.checkSelfPermission(this,       Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED)
            ActivityCompat.requestPermissions(
                    this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    READ_EXTERN_STORE_RECODE);
        else
            onGetSongDetail();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == READ_EXTERN_STORE_RECODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                onGetSongDetail();
            else
                Toast.makeText(this, "u reject", Toast.LENGTH_SHORT).show();
        } else
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    }


    //开线程,开handler 加速
    private void onGetSongDetail() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                mSongDetailDetails = getExternSongDetail();
                Message msg = new Message();
                msg.what = LOADING_SONG_DETAIL;
                mHandler.sendMessage(msg);
            }
        }).start();
    }
    private ArrayList<SongDetail> getExternSongDetail() {
        //格式化的代码,没什么好讲
        ArrayList<SongDetail> songDetails = new ArrayList<SongDetail>();
        Cursor cursor = getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                new String[] {
                        MediaStore.Audio.Media.DISPLAY_NAME,
                        MediaStore.Audio.Media.ARTIST,
                        MediaStore.Audio.Media.DURATION,
                        MediaStore.Audio.Media.DATA}, null, null, null);
        try {
            if (cursor != null) {
                while (cursor.moveToNext()) {
                    SongDetail songDetail = new SongDetail();
                    songDetail.mFileName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                    songDetail.mSinger = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                    songDetail.mDuration = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
                    songDetail.mFileUrl = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                    songDetails.add(songDetail);
                }
            }
        } catch (Exception e) {
            Log.i("PAINT_DEBUG", "error happen in get song detail:"+e.toString());
        } finally {
            cursor.close();
        }
        return songDetails;
    }

    private void initBtnNotifyer() {
        ((Button) findViewById(R.id.btn_simplebtn)).setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //notify的唯一标识码,
                        //(用于NotificationManager)getSystemService(NOTIFICATION_SERVICE)).cancel(...) 取消该通知
                        int PAGE_JUMP_IDENTICATION_CODE = 159;
                        Notification notification = new NotificationCompat.Builder(getApplicationContext())
                                //调用PendingIntent.getActiviy|.getService|.getBroadcast 为通知提供动作
                                .setContentIntent(PendingIntent.getActivity(
                                        getApplicationContext(), 0,
                                        //Intent包装通知的动作
                                        new Intent(MainActivity.this, MainActivity.class), 0))
                                //通知的优先级,不同优先级有不同的视觉效果
                                //NotificationCompat.PRIORITY_MIN|_LOW|_DEFAULT|_HIGH|_MAX
                                .setPriority(NotificationCompat.PRIORITY_LOW)
                                //通知发送的事件
                                .setWhen(System.currentTimeMillis() + 2000)
                                //点击后可以取消通知的状态栏显示
                                .setAutoCancel(true)
                                //通知的标题
                                .setContentTitle("Title")
                                //通知的icon
                                .setSmallIcon(R.mipmap.ic_launcher)
                                //通知内容
                                .setContentText("Text")
                                //通知下拉后的icon
                                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                                /*
                                .setStyle(new NotificationCompat.BigTextStyle().bigText(
                                        "设置长文本可以全部显示、大图片不被缩小"))
                                .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(
                                        BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)))
                                //通知声效,这里用系统自带的文件
                                .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Lua.ogg")))
                                //振动,需要相应权限,振动效果:静止0秒,振动1秒,静止1秒,振动1秒
                                .setVibrate(new long[]{0,1000,1000,1000})
                                //指示灯亮,绿色,亮起1秒,暗去1秒
                                .setLights(Color.GREEN,1000,1000)
                                //设置默认效果,NotificationCompat.DEFAULT_ALL|_LIGHTS|_SOUND|_VIBRATE
                                .setDefaults(NotificationCompat.DEFAULT_ALL)*/
                                .build();
                        //发送通知
                        ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(
                                PAGE_JUMP_IDENTICATION_CODE, notification);
                    }
                }
        );
    }

}

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/songdetail_tv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="18sp"
        android:text="sing detail"
        android:scrollbars="vertical"/>

    <Button
        android:id="@+id/btn_simplebtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="button"
        android:textAllCaps="false"/>

</RelativeLayout>

猜你喜欢

转载自blog.csdn.net/baidu_41743921/article/details/81225654
今日推荐