91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Android應用中添加一個消息提示音功能

發布時間:2020-12-03 15:51:10 來源:億速云 閱讀:443 作者:Leah 欄目:移動開發

本篇文章為大家展示了怎么在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<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<&#63;> 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); 
  } 
 } 

上述內容就是怎么在Android應用中添加一個消息提示音功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卓资县| 东海县| 合山市| 张家口市| 寿光市| 阜新| 时尚| 黄平县| 淅川县| 溧水县| 安龙县| 陆丰市| 深州市| 扶绥县| 碌曲县| 莱芜市| 丁青县| 锡林郭勒盟| 镇坪县| 扶余县| 洛浦县| 辛集市| 商城县| 翁源县| 海南省| 偃师市| 会东县| 普格县| 阳江市| 凤凰县| 康马县| 宜良县| 青海省| 古交市| 余江县| 苗栗市| 边坝县| 湘潭县| 奉化市| 荥阳市| 博爱县|