它实现了一种服务,该服务发送警报并在DB中输入时间后发送消息。但是,DTO中从数据库接收信息的值不会传递给服务。
您已完成在Firebase上设置dto。但是,该服务不会从dto接收数据。
public class timeService extends Service {
NotificationManager Notifi_M;
serviceThread thread;
Notification Notifi ;
public ChatData chat;
String channelId = "channel";
String channelName = "Channel Name";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
chat=new ChatData();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Notifi_M = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
myServiceHandler handler = new myServiceHandler();
thread = new serviceThread(handler);
thread.start();
return START_STICKY;
}
//서비스가 종료될 때 할 작업
public void onDestroy() {
thread.stopForever();
thread = null;//쓰레기 값을 만들어서 빠르게 회수하라고 null을 넣어줌.
}
class myServiceHandler extends Handler {
@Override
public void handleMessage(android.os.Message msg) {
Intent intent = new Intent(timeService.this, OnOffActivity.class);
PendingIntent pendingIntent =
PendingIntent.getActivity(timeService.this, 0,
intent,PendingIntent.FLAG_UPDATE_CURRENT);
try {
//전송
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(chat.getSosNum(), null,
chat.getMsg(), null, null);
Toast.makeText(getApplicationContext(), "전송 완료!",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "전송 실패!",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
nofitication2();
}
};
//팝업알림
private void nofitication2() {
NotificationManager notifManager = (NotificationManager)
getSystemService (Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(
channelId, channelName, importance);
notifManager.createNotificationChannel(mChannel);
}
NotificationCompat.Builder builder =
new NotificationCompat.Builder(getApplicationContext(),
channelId);
Intent notificationIntent = new Intent(getApplicationContext(),
MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
int requestID = (int) System.currentTimeMillis();
PendingIntent pendingIntent
= PendingIntent.getActivity(getApplicationContext()
, requestID
, notificationIntent
, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentTitle("퇴근시간 이탈") // required
.setContentText("팝업 확인해주세요") // required
.setDefaults(Notification.DEFAULT_ALL) // 알림, 사운드 진동 설정
.setAutoCancel(true) // 알림 터치시 반응 후 삭제
.setSound(RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setSmallIcon(android.R.drawable.btn_star)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.drawable.mainlogo))
.setBadgeIconType(R.drawable.mainlogo)
.setContentIntent(pendingIntent);
notifManager.notify(0, builder.build());
}
}
public class serviceThread extends Thread{
Handler handler;
boolean isRun = true;
int count=0;
ChatData chat=new ChatData();
int setTime=0;
public serviceThread(Handler handler){
this.handler = handler;
}
public void stopForever(){
synchronized (this) {
this.isRun = false;
}
}
public void run(){
/*if(chat.getTime()!=NULL){
setTime=Integer.parseInt(chat.getTime());
}*/
//반복적으로 수행할 작업을 한다.
while(isRun){
if(count==50) {
handler.sendEmptyMessage(0);//쓰레드에 있는 핸들러에게 메세지를
보냄
}
try{
count++;
Thread.sleep(1000); //1초씩 쉰다.
}catch (Exception e) {}
}
}
}
public class ChatData {
public String getAdID() {
return adID;
}
public void setAdID(String adID) {
this.adID = adID;
}
private String adID;
private String name;
private String start;
private String end;
private String sosNum;
private String msg;
private String time;
public ChatData() { }
public ChatData(String name,String start,String end,String sosNum,String
msg,String time){
this.name=name;
this.start=start;
this.end =end;
this.sosNum=sosNum;
this.msg=msg;
this.time=time;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getEnd() {
return end;
}
public void setEnd(String end) {
this.end = end;
}
public String getSosNum() {
return sosNum;
}
public void setSosNum(String sosNum) {
this.sosNum = sosNum;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
我遇到错误了
java.lang.IllegalArgumentException:无效的destinationAddress W / System.err:位于android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:360) 在android.telephony.SmsManager.sendTextMessage(SmsManager.java:350) 在com.example.test01.timeService $ myServiceHandler.handleMessage(timeService.java:72) 在android.os.Handler.dispatchMessage(Handler.java:106)
消息传递错误