android接收消息后提示音,Android仿微信新消息提示音
怕有些人不知道怎么进入微信的新消息提示音功能,我这里说下操作步骤:
打开微信----我---设置---新消息提醒---新消息提示音。
经过以上的步骤就进入了这样的界面
具体实现的步骤。
难点之一:获取到手机系统的提示音,并将它们显示在一个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,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,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仿微信新消息提示音所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
android接收消息后提示音,Android仿微信新消息提示音相关推荐
- android微信加人有提示音吗,Android仿微信新消息提示音
環信聊天消息提示音的實現 仿微信新消息提示音設置. 思路:用RingtoneManager查詢出title,Ringtone,uri信息,title用來展示,Ringtone用來播放,uri設置提示音 ...
- android新消息提醒功能,Android仿微信新消息提示音
怕有些人不知道怎么进入微信的新消息提示音功能,我这里说下操作步骤: 打开微信----我---设置---新消息提醒---新消息提示音. 经过以上的步骤就进入了这样的界面 具体实现的步骤. 难点之一:获取 ...
- 高仿微信新消息提示音功能
最近公司在做一个项目,有一个切换消息提示音的功能,可以切换本应用收到消息的提示音,而不影响系统提示音.我就按照微信的那个样式进行了编程,最终得到想要的效果. 转载请注明出处,谢谢:http://blo ...
- android放微信@功能,Android仿微信语音消息的录制和播放功能
一.简述 效果: 实现功能: 长按Button时改变Button显示文字,弹出Dialog(动态更新音量),动态生成录音文件,开始录音: 监听手指动作,规定区域.录音状态下手指划出规定区域取消录音,删 ...
- android高仿微信聊天消息列表自由复制文字,双击查看文本内容
SelectTextHelper-高仿微信聊天消息列表自由复制文字,双击查看文本内容 掘金地址 github地址 SelectTextHelper打造一个全网最逼近微信聊天消息自由复制,双击查看文本内 ...
- 【Android视图效果】共享元素实现仿微信查看大图效果
在之前的文章中,我们通过动画实现了这个,具体可以查看[Android 动画]动画详解之仿微信查看大图效果(四),这里,我们用过度动画来实现. 什么是共享元素? 它是Android 5.0新加入的一种过 ...
- 仿微信语音消息的录制和播放
仿微信语音消息的录制和播放 一.简述 效果: 实现功能: 长按Button时改变Button显示文字,弹出Dialog(动态更新音量),动态生成录音文件,开始录音: 监听手指动作,规定区域.录音状态下 ...
- 自定义Dialog提示框高仿QQ浏览器版本更新提示框
前言: 今天是5月7号,真的好久没有写博客了,时光匆匆,我总感觉自己忙忙碌碌似的,静想片刻确实是挺忙的,但是在繁忙当中却缺少了总结归纳,相信大家都知道总结归纳的重要性了,今天我要和大家分享我的自定义D ...
- [经验教程]手机上微信新消息不提示也不显示微信消息通知怎么办?
微信来新消息手机上不提示也不显示新消息提醒通知,主要因为二个方便:一是微信设置新消息通知未启,另一个是手机微信应用未开通消息提醒通知.只要按下面的教程分别排查开启新消息通知即可恢复微信消息通知提醒正常 ...
最新文章
- TinkerNode NB-IoT物联网开发板(NB-IoT专栏—拓展篇3)
- 对于写bash脚本的朋友,read命令是不可或缺的,需要实践一下就可以了解read命令的大致用途: 编写一个脚本: #!/bin/bash # hao32 test read echo -e Pl
- android 连接 asp.net webservice 简单记录
- 如何查看jar包里的源码
- Android 开发(一)项目概况
- proe2001安装指南
- 深入浅出 Java Concurrency (6): 锁机制 part 1[转]
- Servlet第四篇【request对象常用方法、应用】
- wikioi 1294 全排列 dfs
- php 5.6 mcrypt,php 5.6.36 安装mcrypt
- 大家一起用gtk编程4(使用GDB调试程序)[zt]
- 企业版微信公众号从零开始之二(申请认证流程)
- 关于虚拟机中IPI中断的思考
- Jointly Embedding Knowledge Graphs and Logical Rules
- 湘潭大学java实验
- Java实现多图片和文字编辑成一张图片
- PH4-Java核心技术·卷1
- 达人观点 :你应该选机器学习还是数据科学?
- JSPssh物流便利店管理系统SSH 框架 MVC 模式 mysql数据库
- SharePoint 2010 简介