안 드 로 이 드 위 챗 새 메시지 알림
위 챗-나-설정-새로운 메시지 알림-새로운 메시지 알림 음 을 엽 니 다.
이상 의 절 차 를 거 쳐 이런 인터페이스 에 들 어 갔다.
구체 적 으로 실현 되 는 절차.
어 려 운 점 중 하나:핸드폰 시스템 의 알림 음 을 가 져 와 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);
}
}
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.