안 드 로 이 드 위 챗 새 메시지 알림

9295 단어 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); 
} 
가 져 온 메시지 알림 음의 이름 을 array List 에 추가 합 니 다.
먼저 메 인 인터페이스의 정 보 를 붙 이 고 보 세 요.제 가 천천히 설명 하 겠 습 니 다.

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 에 표 시 된 첫 번 째 줄 은'시스템 따라 가기'아 이 템 이기 때문에 저 는 데 이 터 를 맞 출 때 작은 변화 가 있 습 니 다.i=-1 일 때 ringtone List 를'시스템 따라 가기'로 추가 하고 다른 것 은 변 하지 않 습 니 다.이러한 처리 가 진행 되 었 기 때문에 각 아 이 템 을 클릭 할 때 벨 소 리 를 얻 고 재생 할 때 이러한 처 리 를 해 야 합 니 다.Ringtone ringtone = manager.getRingtone(position - 1);  설명 2:
마지막 으로 선택 한 벨 소리 uri 경 로 를 String 형식 으로 shared Preference 에 저장 합 니 다.

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); 
  } 
 } 
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기