Android仿微信新消息提示音

Android仿微信新消息提示音,第1张

概述怕有些人不知道怎么进入微信的新消息提示音功能,我这里说下 *** 作步骤:打开微信----我---设置---新消息提醒---新消息提示音。

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

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

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

具体实现的步骤。

难点之一:获取到手机系统的提示音,并将它们显示在一个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,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仿微信新消息提示音所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存