系统声音
package com.ahsoft.tachymeterapp.utils;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import static org.litepal.LitePalApplication.getContext;
/**
 * created by Taoyuan on 2020/10/23
 * 获取系统声音
 */
public class SoundUtils {
    private Ringtone mRingtone;
    public SoundUtils() {
        Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        mRingtone = RingtoneManager.getRingtone(getContext(), uri);//通过Uri 来获取提示音的实例对象
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            mRingtone.setLooping(false);
        }
    }
    public void play() {
        if (!mRingtone.isPlaying()) {
            mRingtone.play();
        }
    }
    public void stop() {
        if (mRingtone != null) {
            mRingtone.stop();
            mRingtone = null;
        }
    }
}
资源声音
package com.jty.myutils.utils;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import java.io.IOException;
/**
 * created by Taoyuan on 2020/7/3
 */
public class SoundUtils {
    private MediaPlayer player;
    private AssetManager assetManager;
    public SoundUtils(Context context, String fileName) {
        player = new MediaPlayer();
        assetManager = context.getResources().getAssets();
        setDataSource(fileName);
    }
    public void setDataSource(String fileName) {
        try {
            AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName);
            player.setDataSource(
                    fileDescriptor.getFileDescriptor(),
                    fileDescriptor.getStartOffset(),
                    fileDescriptor.getLength());
            player.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void play() {
        if (!player.isPlaying())
            player.start();
    }
    public void stop() {
        if (player != null && player.isPlaying()) {
            player.stop();
            player.reset();
        }
    }
    public void destroy() {
        if (player != null) {
            player.release();
            player = null;
        }
        if (assetManager != null) {
            assetManager.close();
            assetManager = null;
        }
    }
}
Note
- 可以使用raw,可以直接使用 
R.raw.资源名称 - 以上两种方法均可以直接提供输入流
 - 可以使用文件系统
 
振动
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(500);//震动时长 ms
振动需要权限
<uses-permission name="android.permission.VIBRATE" />