中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

怎么在Android應(yīng)用中添加一個消息提示音功能

本篇文章為大家展示了怎么在Android應(yīng)用中添加一個消息提示音功能,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、網(wǎng)站制作與策劃設(shè)計,泗縣網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:泗縣等地區(qū)。泗縣做網(wǎng)站價格咨詢:028-86922220

具體實(shí)現(xiàn)的步驟。

難點(diǎn)之一:獲取到手機(jī)系統(tǒng)的提示音,并將它們顯示在一個listview里面。

參考如下代碼:

// 獲得RingtoneManager對象 
RingtoneManager manager = new RingtoneManager(this); 
// 設(shè)置RingtoneManager對象的類型為TYPE_NOTIFICATION,這樣只會獲取到notification的對應(yīng)內(nèi)容 
manager.setType(RingtoneManager.TYPE_NOTIFICATION); 
Cursor cursor = manager.getCursor(); 
int num = cursor.getCount(); 
Log.i("tag", num + "消息音個數(shù)"); 
// 存儲消息音名字的arrayList 
ArrayList<String> ringtoneList = new ArrayList<String>(); 
for (int i = 0; i < num; i++) { 
 //獲取當(dāng)前i的鈴聲信息 
 Ringtone ringtone = manager.getRingtone(i); 
 //獲取當(dāng)前i的uri,設(shè)置notification的自定義鈴聲要用到 
 Uri uri = manager.getRingtoneUri(i); 
 //獲取到當(dāng)前鈴聲的名字 
 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); 
  // 設(shè)置從第getIndex()行開始顯示 
  listView.setSelection(getIndex()); 
  listView.setOnItemClickListener(new OnItemClickListener() { 

   @SuppressWarnings("static-access") 
   @Override 
   public void onItemClick(AdapterView<&#63;> parent, View view, 
     int position, long id) { 
    // 當(dāng)點(diǎn)擊的item是第一個“跟隨系統(tǒng)”時 
    if (position == 0) { 
     // 得到系統(tǒng)默認(rèn)的消息uri 
     Uri defalutUri = manager 
       .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     // 通過URI獲得系統(tǒng)默認(rèn)的Ringtone發(fā)出聲音 
     Ringtone defalutRingtone = manager.getRingtone( 
       RingtoneActivity.this, defalutUri); 
     defalutRingtone.play(); 
     ringName = "跟隨系統(tǒng)"; 
     uri = null; 
    } else { 
     // 當(dāng)點(diǎn)擊的item不是第一個“跟隨系統(tǒng)”時,獲得的鈴聲要減一才對 
     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的點(diǎn)擊事件里面,用到了 
  */ 
 private void initRingtoneManager() { 
  manager = new RingtoneManager(this); 
  manager.setType(RingtoneManager.TYPE_NOTIFICATION); 
  manager.getCursor(); 
 } 

 /** 
  * 得到當(dāng)前鈴聲的行數(shù) 
  */ 
 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 + "消息音個數(shù)"); 
  ringtoneList = new ArrayList<String>(); 
  for (int i = -1; i < num; i++) { 
   if (i == -1) { 
    ringtoneList.add("跟隨系統(tǒng)"); 
   } 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 == "") { 
    // 沒有改動鈴聲直接關(guān)閉界面 
    finish(); 
   } else { 
    // 已經(jīng)改動uri,如果又選擇了跟隨系統(tǒng),則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:

因?yàn)閘istView顯示的第一行是一個“追隨系統(tǒng)”的item,所以我在適配數(shù)據(jù)的時候,有些小改變,在i=-1的時候,將ringtoneList添加為“追隨系統(tǒng)”,其他的不變。因?yàn)檫M(jìn)行了這樣的處理,那么在點(diǎn)擊各個item時候,獲得鈴聲并進(jìn)行播放時候,要做這樣的處理:

Ringtone ringtone = manager.getRingtone(position - 1); 

解釋2:

最終將選擇的鈴聲uri路徑以String的格式存入到sharedPreference中。

Bitmap btm = BitmapFactory.decodeResource(getResources(), 
  R.drawable.ic_launcher); 
// 這里大圖標(biāo),小圖標(biāo)剛好相反 
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("")) { 
  // 如果選擇了其他的系統(tǒng)聲音 
  builder.setSound(Uri.parse(SharedPreferenceUtil.getString( 
    OnlineService.this, SharedPreferenceUtil.url_string))); 
 } else { 
  // 默認(rèn)的系統(tǒng)聲音 
  builder.setDefaults(Notification.DEFAULT_SOUND); 
 } 
} 

if (SharedPreferenceUtil.getBoolean(this, 
  SharedPreferenceUtil.IS_VIBRATE)) { 

} else { 
 builder.setDefaults(Notification.DEFAULT_VIBRATE); 
} 
// 構(gòu)建一個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); 
// 設(shè)置通知主題的意圖 
builder.setContentIntent(pendingIntent); 
// 獲取通知管理器對象 
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify(id, builder.build()); 

注意:如果是要選擇其他的聲音,直接是n.sound = 其他聲音的Uri

這個真的非常重要,就直接這樣就可以了,看網(wǎng)上一大堆什么

notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6"); //使用系統(tǒng)提供的鈴音

解釋3:

當(dāng)點(diǎn)擊保存按鈕后,就進(jìn)入到之前的界面,因?yàn)槲抑暗慕缑媸且粋€viewpager+fragment的一個界面,一個activity里面加入了四個Fragment的這樣的一個界面。進(jìn)入到主activity時候,進(jìn)行判斷:

/** 
 * 選擇消息提示音后,跳轉(zhuǎn)到功能界面后,直接將其跳轉(zhuǎn)設(shè)置界面 
*/ 
private void selectRingtone() { 
  String ringName = getIntent().getStringExtra("ringName"); 
  Log.e("tag", ringName+"傳過來的值"); 
  if (ringName != null) { 
   pager.setCurrentItem(2); 
  } 
 } 

上述內(nèi)容就是怎么在Android應(yīng)用中添加一個消息提示音功能,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞名稱:怎么在Android應(yīng)用中添加一個消息提示音功能
標(biāo)題來源:http://www.rwnh.cn/article38/jdjjsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站排名、網(wǎng)站設(shè)計公司、域名注冊、App設(shè)計、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
平武县| 汨罗市| 抚远县| 柏乡县| 新邵县| 澎湖县| 道孚县| 布拖县| 米林县| 双牌县| 襄垣县| 广汉市| 沭阳县| 涿州市| 黑河市| 阿尔山市| 南江县| 岢岚县| 永泰县| 曲靖市| 廊坊市| 资阳市| 临城县| 江西省| 黄山市| 马鞍山市| 仁化县| 自治县| 资兴市| 应城市| 绥宁县| 阳谷县| 高州市| 丹寨县| 石狮市| 南安市| 德兴市| 乌鲁木齐市| 永胜县| 崇文区| 蚌埠市|