怕有些人不知道怎么进入微信的新消息提示音功能,我这里说下操作步骤:

打开微信----我---设置---新消息提醒---新消息提示音。
经过以上的步骤就进入了这样的界面
具体实现的步骤。
难点之一:获取到手机系统的提示音,并将它们显示在一个listview里面。
参考如下代码:
// 获得RingtoneManager对象
RingtoneManager manager = new RingtoneManager(this);
// 设置RingtoneManager对象的类型为TYPE_NOTIFICATION,这样只会获取到notification的对应内容
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
Cursor cursor = manager.getCursor();
int num = cursor.getCount();
Log.i("tag", num + "消息音个数");
// 存储消息音名字的arrayList
ArrayList<String> ringtoneList = new ArrayList<String>();
for (int i = 0; i < num; i++) {
//获取当前i的铃声信息
Ringtone ringtone = manager.getRingtone(i);
//获取当前i的uri,设置notification的自定义铃声要用到
Uri uri = manager.getRingtoneUri(i);
//获取到当前铃声的名字
String title = ringtone.getTitle(this);
ringtoneList.add(title);
}
将获取到的消息提示音的名字,加入到arrayList里。
先将主界面的信息贴上来,看一下,我再慢慢解释:
package jz.his.activity;
import java.util.ArrayList;
import jz.his.adapter.RingtoneAdapter;
import jz.his.jzhis.R;
import jz.his.util.SharedPreferenceUtil;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
public class RingtoneActivity extends Activity {
ArrayList<String> ringtoneList;
ListView listView;
RingtoneManager manager;
RingtoneAdapter adapter;
String ringName = "";
/**
* 选择铃声的uri
*/
Uri uri = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_ringtone);
listView = (ListView) findViewById(R.id.ringtone);
getRingtone();
// initRingtoneManager();
// ringtoneList = FunctionActivity.ringtoneList;
adapter = new RingtoneAdapter(this, ringtoneList, getIndex());
listView.setAdapter(adapter);
// 设置从第getIndex()行开始显示
listView.setSelection(getIndex());
listView.setOnItemClickListener(new OnItemClickListener() {
@SuppressWarnings("static-access")
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 当点击的item是第一个“跟随系统”时
if (position == 0) {
// 得到系统默认的消息uri
Uri defalutUri = manager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
// 通过URI获得系统默认的Ringtone发出声音
Ringtone defalutRingtone = manager.getRingtone(
RingtoneActivity.this, defalutUri);
defalutRingtone.play();
ringName = "跟随系统";
uri = null;
} else {
// 当点击的item不是第一个“跟随系统”时,获得的铃声要减一才对
Ringtone ringtone = manager.getRingtone(position - 1);
uri = manager.getRingtoneUri(position - 1);
ringtone.play();
ringName = ringtone.getTitle(RingtoneActivity.this);
}
adapter.first = new int[ringtoneList.size()];
if (adapter.first[position] == 0) {
adapter.first[position] = 1;
} else {
adapter.first[position] = 0;
}
adapter.notifyDataSetChanged();
}
});
}
/**
* 初始化RingtoneManager对象,在listview的点击事件里面,用到了
*/
private void initRingtoneManager() {
manager = new RingtoneManager(this);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
manager.getCursor();
}
/**
* 得到当前铃声的行数
*/
private int getIndex() {
for (int i = 0; i < ringtoneList.size(); i++) {
if (SharedPreferenceUtil.getString(RingtoneActivity.this,
SharedPreferenceUtil.RINGTONE_NAME).equals(
ringtoneList.get(i))) {
return i;
}
}
return 0;
}
/**
* 得到ringtone中的所有消息声音
*/
private void getRingtone() {
manager = new RingtoneManager(this);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
Cursor cursor = manager.getCursor();
int num = cursor.getCount();
Log.i("tag", num + "消息音个数");
ringtoneList = new ArrayList<String>();
for (int i = -1; i < num; i++) {
if (i == -1) {
ringtoneList.add("跟随系统");
} else {
Ringtone ringtone = manager.getRingtone(i);
// Uri uri = manager.getRingtoneUri(i);
String title = ringtone.getTitle(this);
ringtoneList.add(title);
}
}
}
public void allClick(View v) {
switch (v.getId()) {
case R.id.back_button:
finish();
break;
case R.id.save:
if (ringName == "") {
// 没有改动铃声直接关闭界面
finish();
} else {
// 已经改动uri,如果又选择了跟随系统,则uri为null,其他的就是uri本身
if (uri == null) {
SharedPreferenceUtil.setString(RingtoneActivity.this,
SharedPreferenceUtil.url_string, "");
} else {
SharedPreferenceUtil.setString(RingtoneActivity.this,
SharedPreferenceUtil.url_string, uri.toString());
}
Intent intent = new Intent();
intent.putExtra("ringName", ringName);
intent.setClass(RingtoneActivity.this, FunctionActivity.class);
startActivity(intent);
}
default:
break;
}
}
}
解释1:
因为listView显示的第一行是一个“追随系统”的item,所以我在适配数据的时候,有些小改变,在i=-1的时候,将ringtoneList添加为“追随系统”,其他的不变。因为进行了这样的处理,那么在点击各个item时候,获得铃声并进行播放时候,要做这样的处理:
Ringtone ringtone = manager.getRingtone(position - 1);
解释2:
最终将选择的铃声uri路径以String的格式存入到sharedPreference中。
Bitmap btm = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
// 这里大图标,小图标刚好相反
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(title).setContentText(content)
.setTicker(tickerText);
if (SharedPreferenceUtil
.getBoolean(this, SharedPreferenceUtil.IS_SOUND)) {
} else {
// 如果消息声音开启
if (!SharedPreferenceUtil.getStringNull(OnlineService.this,
SharedPreferenceUtil.url_string).equals("")) {
// 如果选择了其他的系统声音
builder.setSound(Uri.parse(SharedPreferenceUtil.getString(
OnlineService.this, SharedPreferenceUtil.url_string)));
} else {
// 默认的系统声音
builder.setDefaults(Notification.DEFAULT_SOUND);
}
}
if (SharedPreferenceUtil.getBoolean(this,
SharedPreferenceUtil.IS_VIBRATE)) {
} else {
builder.setDefaults(Notification.DEFAULT_VIBRATE);
}
// 构建一个Intent
Intent intent = new Intent(this, FunctionActivity.class);
intent.putExtra("messageData","messageData" );
sendData();
// 封装一个Intent
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
// 设置通知主题的意图
builder.setContentIntent(pendingIntent);
// 获取通知管理器对象
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, builder.build());
注意:如果是要选择其他的声音,直接是n.sound = 其他声音的Uri
这个真的非常重要,就直接这样就可以了,看网上一大堆什么
notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6"); //使用系统提供的铃音
解释3:
当点击保存按钮后,就进入到之前的界面,因为我之前的界面是一个viewpager+fragment的一个界面,一个activity里面加入了四个Fragment的这样的一个界面。进入到主activity时候,进行判断:
/**
* 选择消息提示音后,跳转到功能界面后,直接将其跳转设置界面
*/
private void selectRingtone() {
String ringName = getIntent().getStringExtra("ringName");
Log.e("tag", ringName+"传过来的值");
if (ringName != null) {
pager.setCurrentItem(2);
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# android
# 消息提示音
# 微信消息提示音
# Android震动与提示音实现代码
# Android 实现电话拦截及拦截提示音功能的开发
# android开发之蜂鸣提示音和震动提示的实现原理与参考代码
# 其他的
# 提示音
# 是一个
# 第一个
# 新消息
# 选择了
# 我在
# 我这
# 将其
# 只会
# 要做
# 并将
# 要用
# 我再
# 自定义
# 有些人
# 非常重要
# 跳转
# 管理器
# 看一下
相关文章:
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
深圳网站制作培训,深圳哪些招聘网站比较好?
如何高效配置IIS服务器搭建网站?
如何通过.red域名打造高辨识度品牌网站?
公司网站设计制作厂家,怎么创建自己的一个网站?
盘锦网站制作公司,盘锦大洼有多少5G网站?
招商网站制作流程,网站招商广告语?
建站之星后台密码遗忘或太弱?如何重置与强化?
如何在企业微信快速生成手机电脑官网?
长沙企业网站制作哪家好,长沙水业集团官方网站?
,巨量百应是干嘛的?
建站主机如何安装配置?新手必看操作指南
简历在线制作网站免费版,如何创建个人简历?
建站之星CMS五站合一模板配置与SEO优化指南
如何挑选优质建站一级代理提升网站排名?
建站主机与服务器功能差异如何区分?
如何安全更换建站之星模板并保留数据?
如何在阿里云通过域名搭建网站?
如何解决VPS建站LNMP环境配置常见问题?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何在Tomcat中配置并部署网站项目?
seo网站制作优化,网站SEO优化步骤有哪些?
如何在腾讯云免费申请建站?
黑客如何通过漏洞一步步攻陷网站服务器?
江苏网站制作公司有哪些,江苏书法考级官方网站?
建站之星上传入口如何快速找到?
建站主机解析:虚拟主机配置与服务器选择指南
开源网站制作软件,开源网站什么意思?
如何选择靠谱的建站公司加盟品牌?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
SQL查询语句优化的实用方法总结
如何高效利用亚马逊云主机搭建企业网站?
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何在万网自助建站中设置域名及备案?
如何快速搭建高效WAP手机网站吸引移动用户?
相册网站制作软件,图片上的网址怎么复制?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
宿州网站制作公司兴策,安徽省低保查询网站?
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何用搬瓦工VPS快速搭建个人网站?
,网站推广常用方法?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
建站之星云端配置指南:模板选择与SEO优化一键生成
临沂网站制作公司有哪些,临沂第四中学官网?
建站三合一如何选?哪家性价比更高?
linux top下的 minerd 木马清除方法
建站168自助建站系统:快速模板定制与SEO优化指南
如何在IIS中配置站点IP、端口及主机头?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
*请认真填写需求信息,我们会在24小时内与您取得联系。