#c# #android #xamarin.forms #xamarin.android #.net-standard
#c# #Android #xamarin.forms #xamarin.android #.net-стандартный
Вопрос:
Я создал службу для проверки уведомлений со своего собственного сервера.
Он отлично работает, когда мое приложение запущено, но он работает не так хорошо, когда мое приложение недавно удалено. Я создал toast, чтобы проверить, запущена ли моя служба stilling или нет, и toast сработал после того, как я завершил работу приложения, но метод, который проверяет сервер, не работает в фоновом режиме.
Я использую xamarin forms и Android service с android oreo, установленным в моем эмуляторе, это мой код:
public class MyService : JobService
{
private void DoWork()
{
try
{
Intent i =new Intent(this.ApplicationContext,typeof(MyReciver));
i.SetAction("ezz");
SendBroadcast(i);
}
catch
{
}
finally
{
StopSelf();
}
}
public override bool OnStartJob(JobParameters jobparams)
{
new Task(() =>
{
while (true)
{
DoWork();
Thread.Sleep(5000);
JobFinished(jobparams, true);
}
}).Start();
return true;
}
public override bool OnStopJob(JobParameters jobparams)
{
return true;
}
}
И это мой приемник:
if (intent.Action == "ezz")
{
try
{
txtmod v = new txtmod();//to get the last id doesn't work in background from shared code
string cc = v.readtxt();
string bb = "Last id " cc;
Toast.MakeText(context, bb, ToastLength.Short).Show();//run in foreground and stil running in back ground
PostReq post = new PostReq(1);//doesn't work in background from shared code
}
catch { }
}
Обновление: txtmod и postreq
public class txtmod
{
string fileName= Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "txtronana.txt");
public string readtxt()
{
string text="" ;
try
{
using (StreamReader sr = File.OpenText(fileName))
{
string s;
while ((s = sr.ReadLine()) != null)
{
text = s;
}
}
}
catch { }
return text;
}
public void savetxt(string postid)
{
try
{
using (StreamWriter sw = File.CreateText(fileName))
{
sw.WriteLineAsync(postid);
}
}
catch { }
}
}
postreq :
public async void chkpostAsync(int idp)
{
Tst:
try
{
CATITEMS x = await getmainitemsasync(1);
if (x.properties.data != null)
{
if (x.properties.data[0].post_id > idp)//d.post_id)
{
for(int f = 0; f <= 9; f )
{
if (x.properties.data[f].post_id > idp)
{
push(x.properties.data[f].post_title, x.properties.data[f].post_category, x.properties.data[f].post_id,f 1 DateTime.Now.Second);
}
else { break; }
}
}
if (lastid != x.properties.data[0].post_id)
{
Txtmod.savetxt(x.properties.data[0].post_id.ToString());
}
}
else { goto Tst; }
}
catch { }
}
Комментарии:
1. что такое
txtmod
?2. txtmod класс, который получает последний идентификатор из текстового документа из общего кода
3. если проблема в этом коде, не думаете ли вы, что имело бы смысл поделиться им, чтобы мы могли видеть, что он делает?
4. и postreq метод, который проверяет уведомления
5. Хорошо, @ Jason я обновил свой код