如何在服务方法中完全运行后台进程?

2023-12-08

您好,任何人都可以告诉我如何在没有活动的情况下在服务中运行此代码,我已经在活动中完成了此代码,但我不希望它成为一个应用程序,我需要它在服务中只是为了在服务上显示它,谢谢我已尝试过,但我的活动每 30 分钟显示一次。

这是我的代码:

public class gps extends Activity implements LocationListener {

    LocationManager manager;
    String closestStation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

{
            Calendar cur_cal = Calendar.getInstance();
            cur_cal.setTimeInMillis(System.currentTimeMillis());
            cur_cal.add(Calendar.MINUTE, 15);
            Log.d("Testing", "Calender Set time:" + cur_cal.getTime());

            Intent intent = new Intent(gps.this, gps_back_process.class);
            PendingIntent pintent = PendingIntent.getService(gps.this, 0,
                    intent, 0);
            AlarmManager alarm_manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            alarm_manager.setRepeating(AlarmManager.RTC_WAKEUP,
                    cur_cal.getTimeInMillis(), 1000 * 60 * 15, pintent);
            alarm_manager.set(AlarmManager.RTC, cur_cal.getTimeInMillis(),
                    pintent);
            Log.d("Testing", "alarm manager set");
            Toast.makeText(this, "gps_back_process.onCreate()",
                    Toast.LENGTH_LONG).show();
        }

         Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
         intent.putExtra("enabled", true);
         this.sendBroadcast(intent);

        String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if(!provider.contains("gps")){ //if gps is disabled
            final Intent poke = new Intent();
            poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
            poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
            poke.setData(Uri.parse("3")); 
            this.sendBroadcast(poke);


        }
    {
        //initialize location manager
        manager =  (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        //check if GPS is enabled
        //if not, notify user with a toast
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)); else {
            //get a location provider from location manager
            //empty criteria searches through all providers and returns the best one
            String providerName = manager.getBestProvider(new Criteria(), true);
            Location location = manager.getLastKnownLocation(providerName);

            TextView tv = (TextView)findViewById(R.id.locationResults);
            if (location != null) {
                tv.setText(location.getLatitude() + " latitude, " + location.getLongitude() + " longitude");
            } else
            {
                tv.setText("Last known location not found. Waiting for updated location...");
            }

            manager.requestLocationUpdates(providerName, 1000*60*30 , 1 , this);
        }
    }
}

    @Override
    public void onLocationChanged(Location location) {
        TextView tv = (TextView)findViewById(R.id.locationResults);
        if (location != null) {
            tv.setText(location.getLatitude() + " latitude, " + location.getLongitude() + " longitude");
          // I have added this line
          appendData ( location.getLatitude() + " latitude, " + location.getLongitude() + " longitude" );
        } else {
            tv.setText("Problem getting gps NETWORK ID : " + "");
        }
    }

    @Override
    public void onProviderDisabled(String arg0) {}

    @Override
    public void onProviderEnabled(String arg0) {}

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}

    // Find the closest Bart Station
    public String findClosestBart(Location loc) {
        double lat = loc.getLatitude();
        double lon = loc.getLongitude();

        double curStatLat = 0;
        double curStatLon = 0;
        double shortestDistSoFar = Double.POSITIVE_INFINITY;
        double curDist;
        String curStat = null;
        String closestStat = null;

        //sort through all the stations
        // write some sort of for loop using the API.

        curDist = Math.sqrt( ((lat - curStatLat) * (lat - curStatLat)) +
                        ((lon - curStatLon) * (lon - curStatLon)) );
        if (curDist < shortestDistSoFar) {
            closestStat = curStat;
        }

        return closestStat;

        }   
     // method to write in file 
public void appendData(String text)
{       
   File dataFile = new File(Environment.getExternalStorageDirectory() + "/GpsData.txt");
   if (!dataFile.exists())
   {
      try
      {
         dataFile.createNewFile();
      } 
      catch (IOException e)
      {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
   try
   {
      //BufferedWriter for performance, true to set append to file flag
      BufferedWriter buf = new BufferedWriter(new FileWriter(dataFile, true)); 
      SimpleDateFormat sdf = new SimpleDateFormat("HH:mm, dd/MM/yyyy");
      String currentDateandTime = sdf.format(new Date());
    //  text+=","+currentDateandTime;      
      buf.append(text + "," + currentDateandTime);
      buf.newLine();
      buf.close();
   }
   catch (IOException e)
   {
      // TODO Auto-generated catch block
      e.printStackTrace();
   }
}
}

1.扩展服务类而不是Activity类并且
2.将代码放入oncreate()中
3.将您的服务添加到清单中。
4.从活动中调用服务一次

         Intent service = new Intent(context, localService.class);
         context.startService(service); 

follow 本教程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在服务方法中完全运行后台进程? 的相关文章

随机推荐

  • 继承接口的Java重载方法

    我正在尝试了解java行为 使用此接口 public interface IA public interface IB extends IA public class myClass implements IB 我正在重载这样的方法 pub
  • 使用 JAXB 映射包含超类型和子类型的 Java 集合

    我正在尝试用 JAXB 制作这样的东西
  • 使函数在完成一些工作后返回自身

    let log x print int x log log 111 222 我期待着log打印111并返回自身然后打印222在第二次调用时 但它没有按预期工作 而是收到一条错误消息 为什么 如何让它按预期工作 我也尝试过rec无济于事 Fi
  • 超出 C# 中基本类型的数字

    我正在解决问题欧拉计划 大部分问题都解决了 超过 ulong 的大数字 Ex ulong number 81237146123746237846293567465365862854736263874623654728568263582 有效
  • 仍在努力处理大数据集

    我一直在这个网站上阅读 但未能找到确切的答案 如果它已经存在 我对重新发布表示歉意 我正在处理非常大的数据集 在具有 32 GB RAM 的计算机上有 6 亿行 64 列 我实际上只需要这些数据的更小的子集 但除了简单地使用 fread 导
  • 审计日志记录nhibernate

    您能否提供一些使用 NHibernate 进行审计日志记录的示例 ASP Net C 代码 而不是 java 代码 事件监听器比拦截器更适合审计信息 这是一个很好的例子 from 阿延德的博客
  • 强制某些代码始终在同一线程上运行

    我们有一个旧的第 3 方系统 我们称之为 Junksoft 95 我们通过 PowerShell 与之交互 它公开 COM 对象 我正在将其包装在 REST API ASP NET Framework 4 8 和 WebAPI 中2 我用S
  • 延迟断点:类何时加载

    我正在尝试使用以下命令调试 Maven jdb attach 8000 使用后mvnDebug 我尝试设置断点 但得到 main 1 stop in DeployMojo DeployMojo Deferring breakpoint De
  • 使用 JavaScript 进行图像缩放?

    有没有人有一些好的代码来使用 javascript 放大图像 我知道我可以调整它的大小等 但我很懒 正在寻找一些聪明的东西来缩放到不同的级别 缩放时四处移动等 检查一下 jQZoom Zoomimage jQuery 插件 jQuery I
  • Eclipse 如何将 .java 文件作为小程序运行?

    我一直在尝试运行一个从命令行创建的简单小程序 我尝试这样做 C java Applet 显然这不起作用 但是 我注意到 如果我选择该类并选择作为 java applet 运行 则 Eclipse 允许我运行该 applet Eclipse
  • 如何将文档内容动态加载到iframe中?

    我想做这样的东西 A B B页面在A页面里面 我想把所有的js css都插入到A页面中 我想把B页面分开 我设计它使用一个iFrame 动态获
  • 检查单词是否存在两次? (正则表达式)[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我对正则表达式很糟糕 我想要的是检查一个字符串是否有两次 http 一词 例如 http
  • modelica:计算随时间变化的连续变量的最小值/最大值

    如上所述 我希望计算连续变量随时间变化的最小值 和 或最大值 这是一个演示的最小示例 model MinMaxTest Real u Real u min start 10 Real u max start 10 equation u si
  • 用JS发送文件到PHP服务器

    我可以使用拖放将文件从浏览器发送到服务器 并且此代码工作正常 var temp new FormData temp append file content e originalEvent dataTransfer files 0 Ajax
  • Kotlin 术语“可变”是错误的吗?

    我的理解是 变量 一词指的是重新分配引用的能力 常量 意味着不能重新分配引用 Java中final和not的本质区别 var something new obj gt reference can be re assigned val som
  • 从嵌套 json 文件中删除 python dict 项

    我有一个 JSON 文件 当我尝试删除 python 字典中的项目时 我从返回 KeyError 0 的 API 中获取该文件 我认为这是我缺乏技能和 json 格式的结合 我的目标是删除所有实例192 168 1 1 from ip ad
  • Hbase 错误“错误:KeeperErrorCode = NoNode for /hbase/master”

    在 hbase shell 中执行任何命令时 我在 hbase shell 中收到以下错误 ERROR KeeperErrorCode NoNode for hbase master 启动HBASE HOSTCHND hbase 2 0 0
  • 实现可以将提示视为实际语句吗?

    在C中 register存储限定符是hint对于实现来说 应该尽可能快地访问此类标识符 例如 存储在 CPU 寄存器中 6 7 1具有存储类说明符寄存器的对象的标识符声明表明对该对象的访问应尽可能快 这些建议的有效程度取决于实施情况 and
  • FTP从服务器直接下载文件到客户端

    我尝试将文件从 FTP 服务器下载到客户端 如果我使用ftp get 文件被下载到PHP服务器 PHP服务器可以将输出写入浏览器 所以下载过程是 FTP server gt PHP server gt client 这会使流量加倍 这对于下
  • 如何在服务方法中完全运行后台进程?

    您好 任何人都可以告诉我如何在没有活动的情况下在服务中运行此代码 我已经在活动中完成了此代码 但我不希望它成为一个应用程序 我需要它在服务中只是为了在服务上显示它 谢谢我已尝试过 但我的活动每 30 分钟显示一次 这是我的代码 public