Tôi cần in tất cả email đến lúc 9 giờ sáng mỗi sáng. Dưới đây là những gì tôi đã thửAndroid: Cách kiểm tra email tại một thời điểm cụ thể với AlarmManager?
Phần email hoạt động tốt. Tôi có thể kết nối với email và in tất cả. Sự cố xảy ra khi tôi giới thiệu Trình quản lý báo thức. Khi tôi chạy nó, không có gì xảy ra. Nó chỉ bị treo
MainActivity.java
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Properties;
import javax.mail.*;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void checkEmail(View view) {
Log.d("test", "accessing gmail");
Calendar cur_cal = new GregorianCalendar();
cur_cal.setTimeInMillis(System.currentTimeMillis());//set the current time and date for this calendar
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR));
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, cur_cal.get(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND));
cal.set(Calendar.DATE, cur_cal.get(Calendar.DATE));
cal.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH));
// create an Intent
Intent intentAlarm = new Intent(this, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getService(this, 0, intentAlarm, 0);
// create the object
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//set the alarm for 9 AM
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000 * 5, pi);
Toast.makeText(this, "Alarm Scheduled for 9 AM", Toast.LENGTH_LONG).show();
}
}
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:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.admin.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:textSize="24sp"
android:layout_height="wrap_content"
android:text="Email Checker"
android:id="@+id/textView2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="152dp"
android:onClick="checkEmail"/>
</RelativeLayout>
AlarmReceiver.java (UPDATED CLASS)
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.Toast;
public class AlarmReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Intent i = new Intent(context, AsyncTaskActvity.class);
i.putExtra("foo", "bar");
context.startService(i);
Log.d("test", "async");
Toast.makeText(context, "Alarm Triggered", Toast.LENGTH_LONG).show();
}
}
AsyncTaskActvity.java
package com.example.admin.myapplication;
import android.os.AsyncTask;
import android.util.Log;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
public class AsyncTaskActvity extends AsyncTask {
@Override
protected Object doInBackground(Object[] params) {
computerUp();
return null;
}
protected boolean computerUp() {
try {
Properties props = java.lang.System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "[email protected]", "mypassword");
Session s = Session.getInstance(props);
Message[] msgs;
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
msgs = inbox.getMessages();
for (int i = 0; i < msgs.length; i++) {
msgs[i].getSubject();
Log.d("test", msgs[i].getSubject());
}
} catch (Exception e) {
Log.e(e.getClass().getName(), e.getMessage(), e);
}
return true;
}
}
Khi tôi chạy nó, không có gì xảy ra. Tôi đang làm gì sai?
vui lòng đọc câu trả lời của tôi. Bạn đã có rất nhiều lỗi. – Vyacheslav