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

打开微信----我---设置---新消息提醒---新消息提示音。

经过以上的步骤就进入了这样的界面

具体实现的步骤。

难点之一:获取到手机系统的提示音,并将它们显示在一个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 ringtoneList = new ArrayList();

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 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();

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仿微信新消息提示音相关推荐

  1. android开发 app消息提醒功能,Android中利用App实现消息推送机制的代码

    1.消息推送机制 服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭. 我想到了一句话:don't call me,i will call you! qq今 ...

  2. Android仿微信朋友圈6之实现消息提醒功能

    之前有朋友问我消息提醒咋实现,我一直没有整理出来,今天就放出来.微信朋友圈的消息提醒就是收到朋友的评论后背景底部显示消息条数和评论用户,顶部是一张相册背景和当前用户昵称头像. 1.消息提醒的布局如下: ...

  3. android接收消息后提示音,Android仿微信新消息提示音

    怕有些人不知道怎么进入微信的新消息提示音功能,我这里说下操作步骤: 打开微信----我---设置---新消息提醒---新消息提示音. 经过以上的步骤就进入了这样的界面 具体实现的步骤. 难点之一:获取 ...

  4. android放微信@功能,Android仿微信语音消息的录制和播放功能

    一.简述 效果: 实现功能: 长按Button时改变Button显示文字,弹出Dialog(动态更新音量),动态生成录音文件,开始录音: 监听手指动作,规定区域.录音状态下手指划出规定区域取消录音,删 ...

  5. android微信加人有提示音吗,Android仿微信新消息提示音

    環信聊天消息提示音的實現 仿微信新消息提示音設置. 思路:用RingtoneManager查詢出title,Ringtone,uri信息,title用來展示,Ringtone用來播放,uri設置提示音 ...

  6. android高仿微信聊天消息列表自由复制文字,双击查看文本内容

    SelectTextHelper-高仿微信聊天消息列表自由复制文字,双击查看文本内容 掘金地址 github地址 SelectTextHelper打造一个全网最逼近微信聊天消息自由复制,双击查看文本内 ...

  7. 华为设置android系统提醒功能,华为Watch GT智能手表怎么设置消息提醒功能

    华为最近上线发售了一款智能手表-Watch GT,这款产品可能是很多粉丝期待已久的了.而很多用户订购之后回去可能有些问题不会使用,比如怎么设置华为Watch GT的消息提醒功能.接下来小编给大家带来相 ...

  8. 仿微信语音消息的录制和播放

    仿微信语音消息的录制和播放 一.简述 效果: 实现功能: 长按Button时改变Button显示文字,弹出Dialog(动态更新音量),动态生成录音文件,开始录音: 监听手指动作,规定区域.录音状态下 ...

  9. php新订单提醒代码,PHP怎么实现新订单提醒功能

    PHP实现新订单提醒功能的方法:首先实现ajax轮询:然后下载workerman:接着连接服务端,代码为"var socket = io('http://www.tp5_test.com:2 ...

最新文章

  1. Java删除指定文件夹下的文件和目录
  2. mysql 时差查了13小时_Mysql 时间差了 14 或 13 小时 com.mysql.cj.jdbc.Driver
  3. 动态规划面试常考:最短路径和
  4. 计算机解译地学应用效果,不同的遥感解译方法在地表覆盖分类信息提取中的应用研究...
  5. 利用SQL计算两个地理坐标(经纬度)之间的地表距离
  6. java父类引用子类_java多态,如何理解父类引用指向子类对象
  7. 微信说不!有何不可?
  8. python编码规范总结、python编码转换
  9. js bom dom
  10. Netty in action—Netty中的ByteBuf
  11. Html图片懒加载动画,带加载进度的Web图片懒加载组件Lazyload
  12. universe是什么牌子_【寰宇影视】品牌介绍→寰宇电影_寰宇娱乐_买购网
  13. dubbo源码解析-directory
  14. 阿里巴巴矢量图标库使用
  15. NXP JN5169 唤醒定时器
  16. java中1字节(8位)_Java中基本数据类型占几个字节多少位
  17. vc 鲜为人知的 __if_exists
  18. vivo手机可以升级鸿蒙系统,什么手机可以刷鸿蒙系统?vivo、OPPO、三星手机刷鸿蒙系统教程...
  19. C#大文件上传支持切片上传
  20. Daphne以10%的单利投资了100美元。也就是说,每一年的利润都是投资额的10%,即每年10美元:利息 = 0.10 * 原始存款而Cleo以5%的复利投资了100美元。也就是说,

热门文章

  1. Microsoft Edge v107.0.1418.35 微软Edge浏览器便携版
  2. 为什么深度学习在机器学习中如此火爆?深度学习还会迎来冬天吗?
  3. 【蓝牙模块】多主多从蓝牙模块介绍
  4. 感恩工作平台心得体会_感恩工作心得体会5篇
  5. 2020年有寓意的领证日期_2020年,这些日期去领证含有特殊的寓意
  6. js或jq中返回上一页
  7. 代码中被植入了恶意删除操作,太狠了!
  8. 《MySQL数据操作与查询》- 综合项目 - 航空售票系统
  9. 长城证券分析报告(0608)
  10. 这段视频火爆外网,谷歌把AI视频造假搞得太真太简单了