android鬧鈴簡單實(shí)現(xiàn)
更新時間:2015年03月12日 15:31:31 投稿:hebedich
本文給大家分享的是一段簡單的實(shí)現(xiàn)Android系統(tǒng)的鬧鈴的代碼,非常實(shí)用,想做Android開發(fā)的小伙伴們可以參考下。
1.鬧鈴activity
復(fù)制代碼 代碼如下:
package com.example.myalarm;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TimePicker;
public class AlarmActivity extends Activity {
private static final String TAG = "AlarmActivity";
AlarmManager alarmManager;
Calendar calendar = Calendar.getInstance(Locale.CHINESE);
Button setTime;
Button setRing;
Button setOver;
Uri ringUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alarm);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
setTime = (Button) findViewById(R.id.setTime);
setRing = (Button) findViewById(R.id.setRing);
setOver = (Button) findViewById(R.id.setOver);
//setTime();
//setRingtone();
setTimeAndRing();
}
private void setTimeAndRing(){
setTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
setTime();
}
});
setRing.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
setRingtone();
}
});
setOver.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
setAlarm(calendar);
}
});
}
//啟動鬧玲,設(shè)置鬧玲
private void setAlarm(Calendar calendar){
Intent intent = new Intent();
intent.setClass(this, AlarmBroadcastReceiver.class);
intent.putExtra("msg", "Get up!Get up!");
intent.putExtra("ringURI", ringUri.toString());
Log.d(TAG, ringUri.toString());
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), pendingIntent);
}
//設(shè)置時間
private void setTime(){
Date date = new Date();
calendar.setTime(date);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
new TimePickerDialog(this, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
calendar.set(Calendar.HOUR,hour);
calendar.set(Calendar.MINUTE,minute);
}
}, hour, minute, true).show();
}
//設(shè)置鬧玲鈴聲
private void setRingtone(){
Intent intent = new Intent();
intent.setAction(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "設(shè)置鬧玲鈴聲");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
Uri pickedUri = RingtoneManager.getActualDefaultRingtoneUri(this,RingtoneManager.TYPE_ALARM);
if (pickedUri!=null) {
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,pickedUri);
ringUri = pickedUri;
}
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode!=RESULT_OK) {
return;
}
switch (requestCode) {
case 1:
//獲取選中的鈴聲的URI
Uri pickedURI = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Log.i(TAG,pickedURI.toString());
RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM, pickedURI);
getName(RingtoneManager.TYPE_ALARM);
break;
default:
break;
}
}
private void getName(int type){
Uri pickedUri = RingtoneManager.getActualDefaultRingtoneUri(this, type);
Log.i(TAG,pickedUri.toString());
Cursor cursor = this.getContentResolver().query(pickedUri, new String[]{MediaStore.Audio.Media.TITLE}, null, null, null);
if (cursor!=null) {
if (cursor.moveToFirst()) {
String ring_name = cursor.getString(0);
Log.i(TAG,ring_name);
String[] c = cursor.getColumnNames();
for (String string : c) {
Log.i(TAG,string);
}
}
cursor.close();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.alarm, menu);
return true;
}
}
2,布局文件
復(fù)制代碼 代碼如下:
<RelativeLayout xmlns:android=" xmlns:tools=" android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button android:id="@+id/setTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="設(shè)置時間"/>
<Button android:id="@+id/setRing"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/setTime"
android:text="設(shè)置鈴聲"/>
<Button android:id="@+id/setOver"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/setRing"
android:text="設(shè)置完成"/>
</RelativeLayout>
3.廣播接收鬧鈴信息:
復(fù)制代碼 代碼如下:
package com.example.myalarm;
import java.io.IOException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.util.Log;
import android.widget.Toast;
public class AlarmBroadcastReceiver extends BroadcastReceiver {
Uri ringUri;
@Override
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
MediaPlayer mp = new MediaPlayer();
String uri = intent.getStringExtra("ringURI");
if (uri!=null) {
ringUri = Uri.parse(uri);
Log.d("AlarmActivity", ringUri.toString());
}
try {
mp.setDataSource(context, ringUri);
mp.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
}
}
4.在manifest文件中注冊廣播
復(fù)制代碼 代碼如下:
<receiver android:name="com.example.myalarm.AlarmBroadcastReceiver"></receiver>
以上代碼就是實(shí)現(xiàn)Android鬧鐘的全部代碼了,希望大家能夠喜歡。
您可能感興趣的文章:
- android開發(fā)之蜂鳴提示音和震動提示的實(shí)現(xiàn)原理與參考代碼
- Android實(shí)現(xiàn)調(diào)用震動的方法
- android滑動解鎖震動效果的開啟和取消
- android獲取情景模式和鈴聲 實(shí)現(xiàn)震動、鈴聲提醒
- android 觸屏的震動響應(yīng)接口調(diào)用方法
- Android實(shí)現(xiàn)手機(jī)震動效果
- Android震動與提示音實(shí)現(xiàn)代碼
- Android設(shè)置鈴聲實(shí)現(xiàn)代碼
- Android鬧鈴服務(wù)AlarmManager用法深入分析
- Android編程實(shí)現(xiàn)震動與振鈴的方法詳解
相關(guān)文章
Android 選擇相冊照片并返回功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 從相冊中選擇照片并返回功能,需要的朋友可以參考下2018-03-03
Android startActivityForResult()代替方案示例
這篇文章主要為大家介紹了Android startActivityForResult()代替方案示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Android在線更新SDK的方法(使用國內(nèi)鏡像)
這篇文章主要介紹了Android在線更新SDK的方法,分別介紹了修改hosts文件使用谷歌官方鏡像更新及使用國內(nèi)鏡像更新SDK的方法,非常簡單實(shí)用,需要的朋友可以參考下2015-12-12
Android微信搶紅包功能的實(shí)現(xiàn)原理淺析
快到新年了,微信紅包越來越多,那么基于程序是怎么實(shí)現(xiàn)的呢?今天小編給大家分享Android微信搶紅包功能的實(shí)現(xiàn)原理淺析,一起看看吧2017-01-01
Android編程實(shí)現(xiàn)播放MP3功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)播放MP3功能,結(jié)合實(shí)例形式分析了Android播放MP3功能的界面布局與功能實(shí)現(xiàn)相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
Android布局ConstraintLayout代碼修改約束及輔助功能
這篇文章主要為大家介紹了Android布局ConstraintLayout代碼修改約束及輔助功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
源碼淺析Android中內(nèi)存泄漏檢測工具Leakcanary的使用
大名鼎鼎的 Leakcanary 想必作為 Android 開發(fā)都多多少少接觸過,新版本的 Leakcanary 也用 Kotlin 重寫了一遍,最近詳細(xì)查看了下源碼,就來和大家簡單分享一下2023-04-04

