Хотите создать фоновый сервис Android, который будет постоянно проверять входящие электронные письма. Я создал действие и есть кнопка запуска и остановки сервиса вместе с некоторыми полями ввода от пользователя. При нажатии кнопки запуска службы я вызываю метод службы onStartCommand () и отправляю необходимые сведения (идентификатор электронной почты, pwd и т. Д.) Из действия в службу через намерение службы. Теперь, когда я должен войти в учетную запись электронной почты в onStartCommand (), я вызвал метод Store.connect (), который вызывает исключение android.os.networkonmainthreadexception. Я искал и обнаружил, что должен выполнить задачи подключения к учетной записи электронной почты в методе doinbackground Asynctask, чтобы основной поток не нарушался. Итак, я сделал то же самое, но даже там я получаю ту же ошибку. Но когда я сделал то же самое в действии, создав асинхронный внутренний класс, он работал нормально, но не в случае обслуживания.
Вот метод onstartcommand ()
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Let it continue running until it is stopped.
super.onStartCommand(intent, flags, startId);
String resp = null;
if(intent !=null && intent.getExtras() != null){
emailID = intent.getExtras().getString("email");
pwd = intent.getExtras().getString("pwd");
urlServer = intent.getExtras().getString("urlServer");
from_whom = intent.getExtras().getString("from_whom");
AsyncTaskRunner runner = new AsyncTaskRunner();
//runner.execute(emailID, pwd, urlServer);
resp = runner.doInBackground(emailID, pwd, urlServer);
}
if ((resp.equalsIgnoreCase("yes")))
{
startTimer();
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
}
return START_STICKY;
и приватный внутренний класс asynctask
private class AsyncTaskRunner extends AsyncTask<String, String, String> {
private String resp;
@Override
protected String doInBackground(String... params) {
try {
//emailManager = new EmailManager(params[0], params[1], params[2], "smtp.gmail.com", "imap.gmail.com");
emailManager = new EmailManager("test2891test", "Testing2891!", "gmail.com", "smtp.gmail.com", "imap.gmail.com");
Message[] emails = emailManager.getMails();
Message latest_email = emails[emails.length -1]; // latest email
email_from = InternetAddress.toString(latest_email.getFrom());
email_sub = latest_email.getSubject();
Multipart mp = (Multipart) latest_email.getContent();
получение ошибки android.os.networkonmainthreadexception в методе emailmanager.getmails () для store.connect ():
public Message[] getMails() throws MessagingException {
store = imapSession.getStore("imaps");
store.connect(mailServer, account.emailAddress, account.password);
inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
Message[] result = inbox.getMessages();
return result;
}
ЕСЛИ Я ВСЕ ДЕЛАЮ ВСЕ ЭТИ ASYNCTASK В ДЕЯТЕЛЬНОСТИ, ПОТОМУ ЧТО ЭТО РАБОТАЕТ, ТОЛЬКО УВЕЛИЧИТЬ ОШИБКУ В СЛУЧАЕ ОБСЛУЖИВАНИЯ.
ЛЮБАЯ ПОМОЩЬ БУДЕТ ХОРОШО оценена.
СПАСИБО