如何在后台运行android应用程序 [英] How to run android application in background

查看:90
本文介绍了如何在后台运行android应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能重复:
如何在android中后台运行应用程序?

如果我的位置纬度和经度等于数据库移动配置文件中的纬度和经度应进入静默模式,则我正在使用位置管理器进行项目.因此,我需要继续使用位置管理器更新位置.如果我关闭我的应用程序,它将无法正常工作.但是即使我关闭了我的应用程序,我的应用程序也应该可以正常工作.我在关闭应用程序时尝试了异步任务,但是当我手动切换到大声模式后,它并没有变为无声.当我的应用程序在后台运行时,我也应该得到通知..请提前help.tks

i am doing project using location manager if my location latitude and longitude equal to the same which is in database mobile profile should go to silent mode.so i need to keep on update my location using location manager.i did it .but if i close my app it's not working. but my app should be working even though i close my app.i tried with async task its working when i close the app but after i switch to loud mode manually it's not changing to silent.i should also get notified when my app runs n background..please help.tks in advance

这是我的代码

public class ShowLocationActivity extends Activity implements LocationListener {
      private TextView latituteField;
      private TextView longitudeField;
      private LocationManager locationManager;
      private String provider;
      double lat,lng;
      Location location;
      AudioManager mobilemode ;
        private Boolean flag = false;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.location);
        latituteField = (TextView) findViewById(R.id.TextView02);
        longitudeField = (TextView) findViewById(R.id.TextView04);
        mobilemode = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
        // Get the location manager
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        // Define the criteria how to select the locatioin provider -> use
        // default
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        location = locationManager.getLastKnownLocation(provider);

        // Initialize the location fields

        flag = displayGpsStatus();
        if (flag) {

        if (location != null) {
          System.out.println("Provider " + provider + " has been selected.");
          onLocationChanged(location);


          if((lat==12.905478)&&(lng==80.093358))
        {
            mobilemode.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

            Toast.makeText(getBaseContext(),"VIBRATE profile activated ",Toast.LENGTH_SHORT).show();



        }
        else if ((lat==12.90080625)&&(lng==80.09210655))
        {
            mobilemode.setRingerMode(AudioManager.RINGER_MODE_SILENT);





            Toast.makeText(getBaseContext(),"SILENT profile activated !",Toast.LENGTH_SHORT).show();
            //notification.setLatestEventInfo(ShowLocationActivity.this, "changed to silent mode", "because u r in office", pendingIntent);
              //  notificationManager.notify(i, notification);
        }
        else
        {
           mobilemode.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

            Toast.makeText(getBaseContext(),"LOUD profile activated !",Toast.LENGTH_SHORT).show();
        }



        }




        else {
          latituteField.setText("Location not available");
          longitudeField.setText("Location not available");
        }
    }
        else {
            alertbox("Gps Status!!", "Your GPS is: OFF");
        }


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.location, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.menu_settings:
                 Intent intent = new Intent( ShowLocationActivity.this,SetPreference.class);
                 startActivityForResult(intent, 0);
                 checkPref();
                 return true;

            default:
                return super.onOptionsItemSelected(item);
             }








        }

      private void checkPref(){

          SharedPreferences myPref

          = PreferenceManager.getDefaultSharedPreferences(ShowLocationActivity.this);

          String _pref =

                  "Option 1: " +  myPref.getBoolean("pref_opt1", true);


      }



      @Override

      protected void onActivityResult(int requestCode, int resultCode, Intent data) {

          // TODO Auto-generated method stub

          super.onActivityResult(requestCode, resultCode, data);

          checkPref();

      }
    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        lat = (double) (location.getLatitude());
         lng = (double) (location.getLongitude());
        latituteField.setText(String.valueOf(lat));
        longitudeField.setText(String.valueOf(lng));


    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
         Toast.makeText(this, "Disabled provider " + provider,
                    Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "Enabled new provider " + provider,
                Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }
     @Override
    protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(provider, 400, 1, this);
      }


      @Override
      protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this);
      }

      public void rrr(View v)
      {

          DownloadTask n= new DownloadTask();
             n.doInBackground();
      }
      public void onDestroy()
      {
          super.onDestroy();
          Log.v("hhh","on destroy");
             DownloadTask n= new DownloadTask();
             n.doInBackground();
      }

      public Boolean displayGpsStatus() {
            ContentResolver contentResolver = getBaseContext().getContentResolver();
            boolean gpsStatus = Settings.Secure.isLocationProviderEnabled(
                    contentResolver, LocationManager.GPS_PROVIDER);
            if (gpsStatus) {
                return true;

            } else {
                return false;
            }
        }

        /*----------Method to create an AlertBox ------------- */
        protected void alertbox(String title, String mymessage) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Your Device's GPS is Disable")
                    .setCancelable(false)
                    .setTitle("** Gps Status **")
                    .setPositiveButton("Gps On",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    // finish the current activity
                                    // AlertBoxAdvance.this.finish();
                                    Intent myIntent = new Intent(
                                            Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                                    startActivity(myIntent);
                                    dialog.cancel();
                                }
                            })
                    .setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    // cancel the dialog box
                                    dialog.cancel();
                                }
                            });
            AlertDialog alert = builder.create();
            alert.show();
        }


    public class DownloadTask extends AsyncTask<Integer, Integer, Void> {



        @Override
        protected Void doInBackground(Integer... params) {


            Log.v("hhh","back");
            onCreate(null);
            // onLocationChanged(location);
            /*
            lat = (double) (location.getLatitude());
             lng = (double) (location.getLongitude());
            latituteField.setText(String.valueOf(lat));
            longitudeField.setText(String.valueOf(lng));

            if (location != null) {
                  System.out.println("Provider " + provider + " has been selected.");
                  onLocationChanged(location);


                  if((lat==12.905478)&&(lng==80.093358))
                {
                    mobilemode.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

                    Toast.makeText(getBaseContext(),"VIBRATE profile activated ",Toast.LENGTH_SHORT).show();



                }
                else if ((lat==12.90080625)&&(lng==80.09210655))
                {
                    mobilemode.setRingerMode(AudioManager.RINGER_MODE_SILENT);





                    Toast.makeText(getBaseContext(),"SILENT profile activated !",Toast.LENGTH_SHORT).show();
                    //notification.setLatestEventInfo(ShowLocationActivity.this, "changed to silent mode", "because u r in office", pendingIntent);
                      //  notificationManager.notify(i, notification);
                }
                else
                {
                   mobilemode.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

                    Toast.makeText(getBaseContext(),"LOUD profile activated !",Toast.LENGTH_SHORT).show();
                }



                }




                else {
                  latituteField.setText("Location not available");
                  longitudeField.setText("Location not available");
                }






            // TODO Auto-generated method stub


        */
            return null;
        }
}
}

推荐答案

您已经在Activity中进行了编码,建议您将其更改为

You have coded in Activity, I suggest you to changed it to Android Service. A Service is a component which runs in the background, without interacting with the user.

看看Vogella的服务示例.

Have a look at Vogella's Service Example.

只需将您的活动代码转换为Android服务,它将在没有任何GUI的情况下在后台运行.

Just Convert your Activity code into Android Service and it will work in background without any GUI.

这篇关于如何在后台运行android应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆