这一节看看如何使用系统里面数据库数据信息,我们这里设置系统的notification声音文件,系统里面堆放了很多notification声音文件,可以通过在setting里面选择.
但是我们这里在自己种的应用使用:
由于我们选择了还需要播放出来,所以下面我们会在选择系统的notification后,然后获得uri,根据uri播放这个文件:
主类:
package com.example.androidnotifdemo;import android.media.RingtoneManager;import android.net.Uri;import android.os.Bundle;import android.preference.Preference;import android.preference.Preference.OnPreferenceClickListener;import android.preference.PreferenceActivity;import android.provider.MediaStore;import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends PreferenceActivity implements OnPreferenceClickListener { private Button mbtn; private Preference mPref; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main); this.addPreferencesFromResource(com.example.androidnotifdemo.R.xml.notif); mPref = (Preference) this.findPreference("button_key"); mPref.setOnPreferenceClickListener(this); } private String notificationPath = ""; private void getNotificationTone() { Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "这里填写上你想显示的标题"); Uri ringtoneUri; if (notificationPath != null) { // 这个是你之前选择好的标题,在选择铃声的时候会把它默认选上 ringtoneUri = Uri.parse(notificationPath); } else { // mCustomRingtone如果为空,择默认的铃声会被选中 ringtoneUri = RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); // 选择audio的类型,一般有铃声 // 通知音 // 闹铃音 } intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri); // startActivityForResult(intent, REQUEST_CODE_PICK_RINGTONE); } @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; } @Override public boolean onPreferenceClick(Preference preference) { // TODO Auto-generated method stub if(preference.getKey().toString().equalsIgnoreCase("button_key")){ Uri uri = RingtoneManager.getActualDefaultRingtoneUri( MainActivity.this, RingtoneManager.TYPE_NOTIFICATION); Toast.makeText( MainActivity.this, "notification addr : " + RingtoneManager.getRingtone(MainActivity.this, uri) .getTitle(MainActivity.this), Toast.LENGTH_SHORT).show();// 获取名字 String summary=""; Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(MainActivity.this, RingtoneManager.TYPE_NOTIFICATION); Cursor cursor = MainActivity.this.getContentResolver().query(ringtoneUri, new String[] { MediaStore.Audio.Media.TITLE }, null, null, null); if (cursor != null) { if (cursor.moveToFirst()) { summary = cursor.getString(0); Toast.makeText(MainActivity.this, "summary : " + summary, Toast.LENGTH_SHORT).show(); } cursor.close(); } } return false; }}
下面还要写一个notification列表显示并且保存所选的,这个可以直接复制setting源代码中的:
package com.example.androidnotifdemo;import android.content.Context;import android.content.Intent;import android.media.RingtoneManager;import android.net.Uri;import android.preference.RingtonePreference;import android.util.AttributeSet;public class DefaultRingtonePreference extends RingtonePreference { private static final String TAG = "DefaultRingtonePreference"; public DefaultRingtonePreference(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onPrepareRingtonePickerIntent(Intent ringtonePickerIntent) { super.onPrepareRingtonePickerIntent(ringtonePickerIntent); /* * Since this preference is for choosing the default ringtone, it * doesn't make sense to show a 'Default' item. */ ringtonePickerIntent.putExtra( RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false); } @Override protected void onSaveRingtone(Uri ringtoneUri) { RingtoneManager.setActualDefaultRingtoneUri(getContext(), getRingtoneType(), ringtoneUri); } @Override protected Uri onRestoreRingtone() { return RingtoneManager.getActualDefaultRingtoneUri(getContext(), getRingtoneType()); }}
下一节应该是数据库最后一节,将会在这个demo基础上介绍内容观察者.