提交 1f1abefa 编写于 作者: 只猪会上树's avatar 只猪会上树

Add new file

上级 632c1ee7
package example.com.save;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.bluetooth.BluetoothHeadset;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;
import android.widget.Toast;
import android.support.annotation.RequiresApi;
public class RecordTimeService extends Service {
// 时钟广播接收器
private static TIME_TICK_Receiver time_tick_receiver;
// 耳机广播接收器
private HeadsetReceiver HeadsetReceiver;
// 长时间计时任务AlarmManager
private AlarmManager manager;
private PendingIntent pi;
// 音频控制
private AudioManager audioManager;
private MediaPlayer mediaPlayer;
public RecordTimeService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public void onCreate(){
super.onCreate();
register_time_receiver();
registerHeadsetReceiver(this);
Intent intent=new Intent(this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pd =PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
Notification notify=new Notification.Builder(this)
.setOngoing(true)
.setPriority(Notification.PRIORITY_MAX)
.setContentIntent(pd)
.setContentTitle("监测中")
.setContentText("亲,注意佩戴耳机时长呦")
//.setSmallIcon(R.drawable.headplug)
.build();
startForeground(1,notify);
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public int onStartCommand(Intent intent, int flags, int startId){
//Log.i("service", "启动");
manager = (AlarmManager) getSystemService(ALARM_SERVICE);
int music_time = 7 * 1000;
long triggerAtTime = SystemClock.elapsedRealtime() + music_time;
Intent i = new Intent(this, AlarmReceiver.class);
pi = PendingIntent.getBroadcast(this, 0, i, 0);
manager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
//aaa.txt中为1则耳机连接,为0则耳机断开
if (FileProcess.readInternalData(getApplicationContext(), "aaa.txt") == 1) {
//这里开辟一条线程,用来执行具体的逻辑操作:
new Thread(new Runnable() {
@Override
public void run() {
//Log.i("Service", "线程");
int time2=(int)(SystemClock.elapsedRealtime()/1000)
- FileProcess.readInternalData(getApplicationContext(),"lasttime.txt");
// 持续佩戴耳机时间
FileProcess.writeInternalData(getApplicationContext(),"time2.txt",time2);
//总共时间
int newTime = FileProcess.readInternalData(getApplicationContext(), "time.txt")
+ FileProcess.readInternalData(getApplicationContext(),"time2.txt");
//判断时长是否超过上限
if (newTime >=FileProcess.readInternalData(getApplicationContext(), "limit.txt") ) {
mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.red);
//语音提示
try {
if (mediaPlayer.getCurrentPosition() > 0)
mediaPlayer.seekTo(0);
mediaPlayer.start();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
}).start();
}
return super.onStartCommand(intent,flags,startId);
//系统kill服务自动重启
// return Service.START_STICKY;
}
/**
* 注册时钟广播接收器
*/
private void register_time_receiver(){
time_tick_receiver=new TIME_TICK_Receiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
registerReceiver(time_tick_receiver, filter);
}
/**
* 注册耳机断开与连接广播接收器
* 判定耳机设备连接状态
*/
public void registerHeadsetReceiver(Service service) {
HeadsetReceiver = new HeadsetReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_HEADSET_PLUG);
IntentFilter intentFilter1=new IntentFilter();
intentFilter1.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
service.registerReceiver(HeadsetReceiver, intentFilter);
service.registerReceiver(HeadsetReceiver,intentFilter1);
HeadsetReceiver.setOnHeadsetListener(new OnHeadsetListener() {
@Override
public void isHeadsetConnected(boolean connected) {
if (connected) {
//Log.i("receiver","耳机已连接");
FileProcess.writeInternalData(getApplicationContext(),"aaa.txt",1);
int lasttime=(int)(SystemClock.elapsedRealtime()/1000);
FileProcess.writeInternalData(getApplicationContext(),"lasttime.txt",lasttime);
} else {
//Log.i("receiver","耳机断开");
FileProcess.writeInternalData(getApplicationContext(),"aaa.txt",0);
int newTime=FileProcess.readInternalData(getApplicationContext(),"time.txt")
+ FileProcess.readInternalData(getApplicationContext(),"time2.txt");
FileProcess.writeInternalData(getApplicationContext(), "time.txt", newTime);
FileProcess.writeInternalData(getApplicationContext(),"time2.txt",0);
}
}
});
}
// public void registerNoisyreceiver(Context context){
// noisyReceiver=new NoisyReceiver();
// IntentFilter intentFilter=new IntentFilter();
// intentFilter.addAction(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
// context.registerReceiver(noisyReceiver,intentFilter);
// noisyReceiver.SpeakerChangeListener(new NoisyReceiver() {
// @Override
// public void isSpeaker(boolean speaker) {
// if(speaker){
// mediaPlayer.release();
// }
// }
// });
//
// }
public void onDestroy(){
super.onDestroy();
//Toast.makeText(getApplicationContext(),"onDestroy",Toast.LENGTH_SHORT).show();
//Log.i("service","onDestroy");
}
//判断设备连接的另一种方法
private boolean checkIsWired() {
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
AudioDeviceInfo[] devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
for (AudioDeviceInfo device : devices) {
int deviceType = device.getType();
if (deviceType == AudioDeviceInfo.TYPE_WIRED_HEADSET
|| deviceType == AudioDeviceInfo.TYPE_WIRED_HEADPHONES
|| deviceType == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP
|| deviceType == AudioDeviceInfo.TYPE_BLUETOOTH_SCO) {
return true;
}
}
} else {
return audioManager.isWiredHeadsetOn() || audioManager.isBluetoothScoOn() || audioManager.isBluetoothA2dpOn();
}
return false;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册