免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1231 | 回复: 1
打印 上一主题 下一主题

[Android] android闹铃简单实现 [复制链接]

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-06-26 22:20:00每日论坛发贴之星
日期:2015-06-26 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-08 11:32 |只看该作者 |倒序浏览
[Java]代码
  1. 1.闹铃activity

  2. package com.example.myalarm;

  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.Locale;

  6. import android.media.RingtoneManager;
  7. import android.net.Uri;
  8. import android.os.Bundle;
  9. import android.provider.MediaStore;
  10. import android.app.Activity;
  11. import android.app.AlarmManager;
  12. import android.app.PendingIntent;
  13. import android.app.TimePickerDialog;
  14. import android.app.TimePickerDialog.OnTimeSetListener;
  15. import android.content.Intent;
  16. import android.database.Cursor;
  17. import android.util.Log;
  18. import android.view.Menu;
  19. import android.view.View;
  20. import android.view.View.OnClickListener;
  21. import android.widget.Button;
  22. import android.widget.TimePicker;

  23. public class AlarmActivity extends Activity {
  24.      
  25.     private static final String TAG = "AlarmActivity";
  26.      
  27.     AlarmManager alarmManager;
  28.     Calendar calendar = Calendar.getInstance(Locale.CHINESE);
  29.     Button setTime;
  30.     Button setRing;
  31.     Button setOver;
  32.     Uri ringUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);

  33.     @Override
  34.     protected void onCreate(Bundle savedInstanceState) {
  35.         super.onCreate(savedInstanceState);
  36.         setContentView(R.layout.activity_alarm);
  37.         alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  38.         setTime = (Button) findViewById(R.id.setTime);
  39.         setRing = (Button) findViewById(R.id.setRing);
  40.         setOver = (Button) findViewById(R.id.setOver);
  41.         //setTime();
  42.         //setRingtone();
  43.         setTimeAndRing();
  44.     }

  45.     private void setTimeAndRing(){
  46.         setTime.setOnClickListener(new OnClickListener() {
  47.             
  48.             @Override
  49.             public void onClick(View view) {
  50.                 setTime();
  51.             }
  52.         });
  53.         setRing.setOnClickListener(new OnClickListener() {
  54.             
  55.             @Override
  56.             public void onClick(View view) {
  57.                 setRingtone();
  58.             }
  59.         });
  60.          
  61.         setOver.setOnClickListener(new OnClickListener() {
  62.             
  63.             @Override
  64.             public void onClick(View view) {
  65.                 setAlarm(calendar);
  66.             }
  67.         });
  68.     }
  69.     //启动闹玲,设置闹玲
  70.     private void setAlarm(Calendar calendar){
  71.         Intent intent = new Intent();
  72.         intent.setClass(this, AlarmBroadcastReceiver.class);
  73.         intent.putExtra("msg", "Get up!Get up!");
  74.         intent.putExtra("ringURI", ringUri.toString());
  75.         Log.d(TAG, ringUri.toString());
  76.         PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
  77.         alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), pendingIntent);
  78.     }
  79.     //设置时间
  80.     private void setTime(){
  81.         Date date = new Date();
  82.         calendar.setTime(date);
  83.         int hour = calendar.get(Calendar.HOUR);
  84.         int minute = calendar.get(Calendar.MINUTE);
  85.         new TimePickerDialog(this, new OnTimeSetListener() {
  86.             
  87.             @Override
  88.             public void onTimeSet(TimePicker timePicker, int hour, int minute) {
  89.                 calendar.set(Calendar.HOUR,hour);
  90.                 calendar.set(Calendar.MINUTE,minute);
  91.             }
  92.         }, hour, minute, true).show();
  93.     }
  94.      
  95.      
  96.     //设置闹玲铃声
  97.     private void setRingtone(){
  98.         Intent intent = new Intent();
  99.         intent.setAction(RingtoneManager.ACTION_RINGTONE_PICKER);
  100.         intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
  101.         intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置闹玲铃声");
  102.         intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
  103.         Uri pickedUri = RingtoneManager.getActualDefaultRingtoneUri(this,RingtoneManager.TYPE_ALARM);
  104.         if (pickedUri!=null) {
  105.             intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,pickedUri);
  106.             ringUri = pickedUri;
  107.         }
  108.         startActivityForResult(intent, 1);
  109.     }
  110.      
  111.      
  112.      
  113.      
  114.     @Override
  115.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  116.         super.onActivityResult(requestCode, resultCode, data);
  117.         if (resultCode!=RESULT_OK) {
  118.             return;
  119.         }
  120.         switch (requestCode) {
  121.         case 1:
  122.             //获取选中的铃声的URI
  123.             Uri pickedURI = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
  124.             Log.i(TAG,pickedURI.toString());
  125.             RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM, pickedURI);
  126.             getName(RingtoneManager.TYPE_ALARM);
  127.             break;

  128.         default:
  129.             break;
  130.         }
  131.     }

  132.     private void getName(int type){
  133.         Uri pickedUri = RingtoneManager.getActualDefaultRingtoneUri(this, type);
  134.         Log.i(TAG,pickedUri.toString());
  135.         Cursor cursor = this.getContentResolver().query(pickedUri, new String[]{MediaStore.Audio.Media.TITLE}, null, null, null);
  136.         if (cursor!=null) {
  137.             if (cursor.moveToFirst()) {
  138.                 String ring_name = cursor.getString(0);
  139.                 Log.i(TAG,ring_name);
  140.                 String[] c = cursor.getColumnNames();
  141.                 for (String string : c) {
  142.                     Log.i(TAG,string);
  143.                 }
  144.             }
  145.             cursor.close();
  146.         }
  147.     }
  148.      
  149.     @Override
  150.     public boolean onCreateOptionsMenu(Menu menu) {
  151.         getMenuInflater().inflate(R.menu.alarm, menu);
  152.         return true;
  153.     }

  154. }
  155. 2,布局文件
  156. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  157.     xmlns:tools="http://schemas.android.com/tools"
  158.     android:layout_width="match_parent"
  159.     android:layout_height="match_parent"
  160.     >

  161.    
  162.     <Button android:id="@+id/setTime"
  163.         android:layout_width="wrap_content"
  164.         android:layout_height="wrap_content"
  165.         android:text="设置时间"/>
  166.      
  167.     <Button android:id="@+id/setRing"
  168.         android:layout_width="wrap_content"
  169.         android:layout_height="wrap_content"
  170.         android:layout_below="@+id/setTime"
  171.         android:text="设置铃声"/>
  172.      
  173.     <Button android:id="@+id/setOver"
  174.         android:layout_width="wrap_content"
  175.         android:layout_height="wrap_content"
  176.         android:layout_below="@+id/setRing"
  177.         android:text="设置完成"/>
  178.      

  179. </RelativeLayout>
  180. 3.广播接收闹铃信息:
  181. package com.example.myalarm;

  182. import java.io.IOException;

  183. import android.content.BroadcastReceiver;
  184. import android.content.Context;
  185. import android.content.Intent;
  186. import android.media.MediaPlayer;
  187. import android.net.Uri;
  188. import android.util.Log;
  189. import android.widget.Toast;

  190. public class AlarmBroadcastReceiver extends BroadcastReceiver {
  191.      
  192.     Uri ringUri;

  193.     @Override
  194.     public void onReceive(Context context, Intent intent) {
  195.         String msg = intent.getStringExtra("msg");
  196.         Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
  197.         MediaPlayer mp = new MediaPlayer();
  198.         String uri = intent.getStringExtra("ringURI");
  199.         if (uri!=null) {
  200.             ringUri = Uri.parse(uri);
  201.             Log.d("AlarmActivity", ringUri.toString());
  202.         }
  203.          
  204.         try {
  205.             mp.setDataSource(context, ringUri);
  206.             mp.prepare();
  207.         } catch (IllegalArgumentException e) {
  208.             e.printStackTrace();
  209.         } catch (SecurityException e) {
  210.             e.printStackTrace();
  211.         } catch (IllegalStateException e) {
  212.             e.printStackTrace();
  213.         } catch (IOException e) {
  214.             e.printStackTrace();
  215.         }
  216.         mp.start();
  217.     }

  218. }
  219. 4.在manifest文件中注册广播
  220. <receiver android:name="com.example.myalarm.AlarmBroadcastReceiver"></receiver>
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-07-11 20:41 |只看该作者
其实就是一个响铃,振动和计时的功能实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP