通过“摇一摇”关闭闹钟

以前都是看别人的博客,现在终于有拿得出作品来(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"/>
希望可以帮到大家
 
 

猜你喜欢

转载自blog.csdn.net/herry57/article/details/80785643