当前位置: 首页 > 知识库问答 >
问题:

Android alarmreceiver在检查当前打开或关闭的应用程序时出错

仇承志
2023-03-14

这里是我的代码,我给出了错误发生的注释行(在catch异常中)。有人能帮忙吗?非常感谢。代码:

public class AlarmReceiver extends BroadcastReceiver {

    XMLRPCClient client = null;

    private DBclass db;
    int flagPass = 0;

    @Override
    public void onReceive(Context context, Intent intent) {
        // For our recurring task, we'll just display a message
        try{
            // Create an object to represent the server.
            client = new XMLRPCClient(new URL("...server.php"));

            if(intent.getStringExtra("ID").equalsIgnoreCase("ON")){
                try {
                    int flag = 0;
                    try {
                        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
                        List<ActivityManager.RunningAppProcessInfo> task = am.getRunningAppProcesses();
                        for (int i = 0; i < task.size(); i++) {
                            if (task.get(i).processName.equalsIgnoreCase("com.example.test")) {
                                flag = 1;
                                break;
                            }
                        }
                    }catch (Exception ex){
                        flag = 0;
                    }

                    if(flag == 0){
                        HashMap<String, String> params = new HashMap<String, String>();
                        params.put("COMMAND", "ACON");

                        try {
                            // update buffer
                            client.call("updateDataCommand", params);
                        } catch (XMLRPCException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
                catch (Exception ex) {
                    // error here, always catched here
                    flagPass = 1;
                }

                if(flagPass == 1){
                    HashMap<String, String> params = new HashMap<String, String>();
                    params.put("COMMAND", "ACON");

                    // program error here (apps forced close), unfortunately...
                    try {
                        // update buffer
                        client.call("updateDataCommand", params);
                    } catch (XMLRPCException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

            }


        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

下面是错误消息:java.lang.RuntimeException:无法在Android.app.ActivityThread.Handlereceiver(ActivityThread.java:2732)启动接收器Android.os.NetworkonMainThreadException...在android.app.activitythread.main(activitythread.java:5417)...原因:android.os.networkonmainthreadexception在android.os.strictmode$androidBlockGuardPolicy.onNetwork(strictmode.java:1273)在java.net.inetaddress.lookupHostByName(inetaddress.java:431)在java.net.inetaddress.getallbyNameImpl(inetaddress.java:252)

共有1个答案

呼延沈义
2023-03-14

当应用程序尝试在其主线程上执行网络操作时,会引发此异常。在AsyncTask或后台线程中运行代码

@Override
public void onReceive(Context context, Intent intent) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            //put your code here
        }
    }).start();
}
 类似资料:
  • 是上面的代码少了点什么,还是有什么其他的方式可以在所有android版本上工作? 请建议。多谢了。

  • 我可以通过firebase FCM打开活动,但这只适用于android

  • 我做了一个jsf应用程序。这个应用程序有一个包含开始、停止按钮的菜单。当按下开始时,应用程序开始从网站获取数据,并更新其数据库。应用程序还有更新过程的进度条。但是,这个过程需要很长时间才能完成。我希望当我关闭浏览器时,它应该继续更新数据库。此外,当我再次打开它时,我应该得到以前的状态。然而,这并没有发生。当我关闭浏览器时,应用程序也关闭了。我该怎么办? 谢谢。

  • 问题内容: 我在JPopupMenu中有一个JComboBox(以及其他组件)。事实证明,每当我打开组合框的弹出窗口(以选择一个项目)时,父级JPopupMenu都会关闭。我一直在尝试找到一种方法来覆盖此功能,但无济于事。 有没有人建议防止关闭父级JPopupMenu?谢谢! 问题答案: 这不可能直接实现,很难覆盖已知的错误,另一方面,Swing不允许同时使用两个lightwieght弹出组件 但

  • 当应用程序完全关闭时,如何以编程方式发送通知? 示例:用户关闭应用程序,也在Android Taskmanager中,然后等待。应用程序应在X秒后或应用程序检查更新时发送通知。 我试图使用这些代码示例,但是: 应用程序关闭时推送通知-活动太多/无法工作 我如何让我的应用程序在关闭时发送通知很多信息,但我不知道如何处理 当android应用程序关闭时,如何发送本地通知?-很多信息,但我不知道如何处理

  • 问题内容: 假设您的应用程序所做的很多事情都与读取文件内容有关。不用说,打开然后关闭的文件很有效,除非…新文件的传入速度比旧文件快。这是我发现自己遇到的情况的泡菜。 现在,有没有办法可靠地知道该进程打开了多少文件?像从JVM内部看一样可靠的东西吗? 我怀疑答案可能是特定于操作系统的,所以让我补充一点,我在Linux上运行Java。 问题答案: 在Unix上,一种方法是使用获取方法,如果是,则可以使