Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android上关闭应用程序时,使用alarmmanager设置的Asynctask失败_Android_Android Asynctask_Alarmmanager - Fatal编程技术网

在android上关闭应用程序时,使用alarmmanager设置的Asynctask失败

在android上关闭应用程序时,使用alarmmanager设置的Asynctask失败,android,android-asynctask,alarmmanager,Android,Android Asynctask,Alarmmanager,当我的应用程序打开时,我有一个非常好的ASyncTask,但是你知道当你按住手机上的home(主页)按钮并通过滑动来关闭应用程序时吗?它崩溃了 我的AlarmReceiverclass public class Alarm-Receiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final Context errorContext =

当我的应用程序打开时,我有一个非常好的
ASyncTask
,但是你知道当你按住手机上的home(主页)按钮并通过滑动来关闭应用程序时吗?它崩溃了

我的
AlarmReceiver
class

 public class Alarm-Receiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent)
{
    final Context errorContext = context;
    final UP refUP = new UP(); //just an activity for my toast

    class NotifRequest extends AsyncTask<String, Void, String[]> {
        String NotifUrlStr = String.format(errorContext.getString(R.string.notification_url), Main.Text);

        @Override
        protected String[] doInBackground(String... params) {
            String[] On = new String[2];
            String onProd = "";
            String sonOnTar = "";


            try {
                JSONTokener onTokener = new JSONTokener(Sources.httpConnGet(NotifUrlStr).toString());
                JSONArray onArray=new JSONArray(onTokener);


                JSONObject json_obj_on = onArray.getJSONObject(0);

                onProd = json_obj_on.getString("on");
                if(onProd .equals("0") == false) {
                sonOnTar = json_obj_on.getString("sonon");
                }

            } catch (Exception e) {

                refUP.runOnUiThread(new Runnable() {
                      public void run() {
                          Toast.makeText(errorContext, "Error!", Toast.LENGTH_LONG).show();
                      }
                    });
                CancelAlarm(errorContext);
            }

            On[0] = onProd;
            On[1] = sonOnTar;
            return On;
        }

        @Override
        protected void onPostExecute(String[] onRes) {

            String onSay = onRes[0];
            String onTar = onRes[1];

            if (onSay.equals("0") && onSay != null) {
                NotificationCompat.Builder mBuilder =
                        new NotificationCompat.Builder(errorContext)
                .setSmallIcon(R.drawable.akilli_launcher)
                .setContentTitle("New")
                .setContentText("new");

                Intent resultIntent = new Intent(errorContext, UPSiparisler.class);

                        PendingIntent resultPendingIntent =
                                PendingIntent.getActivity(
                                        errorContext,
                                        0,
                                        resultIntent,
                                        PendingIntent.FLAG_UPDATE_CURRENT
                                        );

                        mBuilder.setContentIntent(resultPendingIntent);


                        int mNotificationId = 001;

                        NotificationManager mNotifyMgr = 
                                (NotificationManager) errorContext.getSystemService(Context.NOTIFICATION_SERVICE);

                        mNotifyMgr.notify(mNotificationId, mBuilder.build());

            }

            super.onPostExecute(onRes);
        }

    }


    NotifRequest notReq = new NotifRequest();
    notReq.execute();

}

public void SetAlarm(Context context)
{
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, AlarmNotifReceiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10*1000, pi); // Millisec * Second
}

public void CancelAlarm(Context context)
{
    Intent intent = new Intent(context, AlarmNotifReceiver.class);
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(sender);
}


 }
公共类报警接收器扩展广播接收器{
@凌驾
公共void onReceive(上下文、意图)
{
最终上下文errorContext=上下文;
final UP refUP=new UP();//这只是我的祝酒词
类NotifRequest扩展异步任务{
String NotifUrlStr=String.format(errorContext.getString(R.String.notification_url),Main.Text);
@凌驾
受保护字符串[]doInBackground(字符串…参数){
字符串[]打开=新字符串[2];
字符串onProd=“”;
字符串sonOnTar=“”;
试一试{
JSONTokener onTokener=新的JSONTokener(Sources.httpConnGet(NotifUrlStr.toString());
JSONArray onArray=新JSONArray(onTokener);
JSONObject json_obj_on=onArray.getJSONObject(0);
onProd=json_obj_on.getString(“on”);
如果(onProd.equals(“0”)==false){
sonOnTar=json_obj_on.getString(“sonon”);
}
}捕获(例外e){
refUP.rununuithread(新的Runnable(){
公开募捐{
Toast.makeText(errorContext,“Error!”,Toast.LENGTH_LONG.show();
}
});
取消报警(errorContext);
}
On[0]=onProd;
On[1]=sonOnTar;
回报;
}
@凌驾
受保护的void onPostExecute(字符串[]onRes){
字符串onSay=onRes[0];
字符串onTar=onRes[1];
if(onSay.equals(“0”)&&onSay!=null){
通知相容建筑商mBuilder=
新建NotificationCompat.Builder(errorContext)
.setSmallIcon(R.drawable.akilli_发射器)
.setContentTitle(“新”)
.setContentText(“新”);
Intent resultIntent=新的Intent(errorContext,upsiparsler.class);
悬而未决的结果悬而未决的结果=
pendingent.getActivity(
errorContext,
0,
结果,
PendingEvent.FLAG_更新_当前
);
mBuilder.setContentIntent(resultPendingContent);
int mNotificationId=001;
通知经理mNotifyMgr=
(NotificationManager)errorContext.getSystemService(Context.NOTIFICATION\u服务);
mNotifyMgr.notify(mNotificationId,mBuilder.build());
}
super.onPostExecute(onRes);
}
}
NotifRequest notReq=新的NotifRequest();
notReq.execute();
}
公共无效设置报警(上下文)
{
AlarmManager am=(AlarmManager)context.getSystemService(context.ALARM\u服务);
意图i=新意图(上下文,AlarmNotifReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(上下文,0,i,0);
am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),10*1000,pi);//毫秒*s
}
公共无效取消报警(上下文)
{
意向意向=新意向(上下文,AlarmNotifReceiver.class);
PendingEvent发送方=PendingEvent.getBroadcast(上下文,0,意图,0);
AlarmManager AlarmManager=(AlarmManager)context.getSystemService(context.ALARM\u服务);
alarmManager.cancel(发送方);
}
}
即使在应用程序关闭且不继续显示
Toast
错误后,我该如何做才能使其正常工作


提前感谢。

在您的活动中,当活动移动到停止状态时,您应该尝试取消您的
异步任务,如下所示:

  @Override
  public void onStop() {
        super.onStop();
        notReq.cancel(true); 
  }

我假设当活动不可见时,您不需要完成任务。

我需要,正如我说过的,我希望它在应用程序运行时也能工作。关门了。虽然我刚刚发现我不能像这样简单地定义字符串。String NotifUrlStr=String.format(errorContext.getString(R.String.notification_url),Main.Text);你对此有什么建议吗?我的问题是在一个不适用的类中使用getString()方法,我该如何使用它?试试
errorContext.getResources().getString(R.string.notification\u url)
我试过了,但我还需要在,在这样的类中如何保存Main.Text字符串?Main.Text在何处初始化?