欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android仿微信新消息提示音

 更新時間:2017年04月19日 08:39:32   作者:ganchuanpu  
本篇文章主要介紹了Android仿微信新消息提示音的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧

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

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

經(jīng)過以上的步驟就進(jìn)入了這樣的界面

具體實(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<?> 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)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

最新評論