Muszę wydrukować wszystkie przychodzące wiadomości e-mail o 9 rano każdego ranka. Oto, co próbowałem.Android: Jak sprawdzić wiadomość e-mail w określonym czasie za pomocą aplikacji AlarmManager?
Część e-mail działa poprawnie. Jestem w stanie połączyć się z pocztą e-mail i wydrukować je wszystkie. Problem pojawia się po wprowadzeniu Menedżera alarmów. Kiedy go uruchomię, nic się nie dzieje. To po prostu wisi
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 (aktualizacja klasa)
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;
}
}
Kiedy uruchamiam go, nic się nie dzieje. Co ja robię źle?
proszę, przeczytaj moją odpowiedź. Masz wiele błędów. – Vyacheslav