以前都是看别人的博客,现在终于有拿得出作品来(UI丑,但实现了功能),想给大家分享分享!
功能:通过摇晃手机次数,关闭闹钟,避免睡懒觉。
用到的android知识:1.闹钟的简单实现(并未使用广播,而是使用PendingIntent触发闹钟)
2.使用加速度传感器实现“摇一摇”
3.用到多媒体播放音频知识
MainActivity.java
public class MainActivity extends AppCompatActivity { TimePicker timepicker; // 时间拾取器 Calendar c; // 日历对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); c=Calendar.getInstance(); //获取日历对象 timepicker = (TimePicker) findViewById(R.id.timePicker1); // 获取时间拾取组件 timepicker.setIs24HourView(true); // 设置使用24小时制 Button button1 = (Button) findViewById(R.id.button1); // 获取“设置闹钟”按钮 // 为“设置闹钟”按钮添加单击事件监听器 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, AlarmActivity.class); // 创建一个Intent对象 PendingIntent pendingIntent = PendingIntent.getActivity( MainActivity.this, 0, intent, 0); // 获取显示闹钟的PendingIntent对象 // 获取AlarmManager对象 AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); c.set(Calendar.HOUR_OF_DAY, timepicker.getCurrentHour()); // 设置闹钟的小时数 c.set(Calendar.MINUTE, timepicker.getCurrentMinute()); // 设置闹钟的分钟数 c.set(Calendar.SECOND,0); // 设置闹钟的秒数 alarm.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent); // 设置一个闹钟 Toast.makeText(MainActivity.this, "闹钟设置成功", Toast.LENGTH_SHORT) .show(); // 显示一个消息提示 } }); } }AlarmActivity.java
public class AlarmActivity extends AppCompatActivity { private SensorManager sensorManager; private MediaPlayer mediaPlayer = new MediaPlayer(); int i=1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL); if(ContextCompat.checkSelfPermission(AlarmActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(AlarmActivity.this,new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE},1 ); } else{ initMediaPlayer(); } mediaPlayer.start(); } private void initMediaPlayer(){ try{ File file = new File(Environment.getExternalStorageDirectory(),"sing.mp3"); mediaPlayer.setDataSource(file.getPath()); mediaPlayer.prepare(); }catch (Exception e){ e.printStackTrace(); } } @Override public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){ switch (requestCode){ case 1: if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ initMediaPlayer(); }else { Toast.makeText(this,"拒绝权限将无法使用权限",Toast.LENGTH_SHORT).show(); finish(); } break; default: } } /* @Override protected void onDestroy(){ super.onDestroy(); if(sensorManager!=null){ sensorManager.unregisterListener(listener); } }*/ private SensorEventListener listener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { //int i=0; float xValue = Math.abs(event.values[0]); float yValue = Math.abs(event.values[1]); float zValue = Math.abs(event.values[2]); if(xValue>30 || yValue>30 || zValue>30 ){ Toast.makeText(AlarmActivity.this,"你摇了!加油",Toast.LENGTH_SHORT).show(); i++; } // i++; if(i==30){ //Toast.makeText(AlarmActivity.this,"不摇动了",Toast.LENGTH_SHORT).show(); // onDestroy(); sensorManager.unregisterListener(listener); mediaPlayer.reset(); } } @Override public void onAccuracyChanged(Sensor sensor, int i) { } }; @Override protected void onDestroy(){ super.onDestroy(); if(mediaPlayer!=null){ mediaPlayer.stop(); mediaPlayer.release(); } } }
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.example.alarm.MainActivity"> <TimePicker android:id="@+id/timePicker1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="设置闹钟" /> </RelativeLayout>
最后权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
希望可以帮到大家