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>