国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android仿微信新消息提示音

2019-12-12 03:03:31
字體:
來源:轉載
供稿:網友

怕有些人不知道怎么進入微信的新消息提示音功能,我這里說下操作步驟:

打開微信----我---設置---新消息提醒---新消息提示音。

經過以上的步驟就進入了這樣的界面

具體實現的步驟。

難點之一:獲取到手機系統的提示音,并將它們顯示在一個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);   }  } 

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连平县| 黄冈市| 宁明县| 闽侯县| 来凤县| 东城区| 晋江市| 康平县| 大宁县| 甘南县| 车致| 南昌县| 岱山县| 吉隆县| 乡城县| 加查县| 武宁县| 桐庐县| 浪卡子县| 兰溪市| 墨脱县| 丹寨县| 利辛县| 惠州市| 河北省| 西藏| 寻乌县| 历史| 固安县| 离岛区| 白银市| 名山县| 恩平市| 榆社县| 潞城市| 潞城市| 明水县| 沙河市| 玉屏| 吐鲁番市| 连山|