
活动启动后,GPS将启用并捕获用户的纬度,经度并将其报告以解析为Geopoint.问题是GPS连续在后台运行并连续向Parse位置报告.我只希望GPS一次获取位置信息,然后立即停止,因为我自己注意到我一天与Parse达成了大约2万个请求,我认为这是因为它在后台连续运行.
以下是活动代码:
public class MoodActivity extends Activity { private FeedbackDialog FeedBack; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_mood); FeedBack = new FeedbackDialog(this, ""); LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); LocationListener mlocListener = new MyLocationListener(); mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); final TextVIEw teating = (TextVIEw) this.findVIEwByID(R.ID.tdinning); teating.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, CasualEventsActivity.class)); } }); final ImageVIEw IEating = (ImageVIEw) this.findVIEwByID(R.ID.IDinning); IEating.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, CasualEventsActivity.class)); } }); final TextVIEw tdrinks = (TextVIEw) this.findVIEwByID(R.ID.tcasual); tdrinks.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, CasualEventsActivity.class)); } }); final ImageVIEw IDrinks = (ImageVIEw) this.findVIEwByID(R.ID.icasual); IDrinks.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, CasualEventsActivity.class)); } }); final TextVIEw tshows = (TextVIEw) this.findVIEwByID(R.ID.tshows); tshows.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, EntertainmentEventsActivity.class)); } }); final ImageVIEw ishows = (ImageVIEw) this.findVIEwByID(R.ID.ishows); ishows.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, EntertainmentEventsActivity.class)); } }); final TextVIEw tarts = (TextVIEw) this.findVIEwByID(R.ID.tculture); tarts.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, CultureEventsActivity.class)); } }); final ImageVIEw iarts = (ImageVIEw) this.findVIEwByID(R.ID.iculture); iarts.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, CultureEventsActivity.class)); } }); final button vIEwall = (button) this.findVIEwByID(R.ID.brandom); vIEwall.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MoodActivity.this.startActivity(new Intent(MoodActivity.this, CasualEventsActivity.class)); } }); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main_activity_actions, menu); getActionbar().setdisplayShowTitleEnabled(false); return true; } @OverrIDe public boolean onoptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemID()) { case R.ID.pageExperIEnce: openPageExperIEnce(); return true; case R.ID.pageMessaging: openPageMessage(); return true; case R.ID.pageEventsBooking: openPageBook(); return true; case R.ID.pageProfile: openPageProfile(); return true; case R.ID.pageReport: openPageReport(); return true; case R.ID.pageAbout: openPageAbout(); return true; case R.ID.pagelogout: openPagelogout(); return true; default: return super.onoptionsItemSelected(item); } } private voID openPagelogout() { // Todo auto-generated method stub //Now call logout ParseUser.logout(); Intent intent = new Intent(getApplicationContext(), LoginActivity.class); startActivity(intent); } private voID openPageAbout() { // Todo auto-generated method stub } private voID openPageReport() { // Todo auto-generated method stub FeedbackSettings FeedbackSettings = new FeedbackSettings(); //submit-CANCEL buttonS FeedbackSettings.setCancelbuttonText("No"); FeedbackSettings.setSendbuttonText("Send"); //DIALOG TEXT FeedbackSettings.setText("hey, would you like to give us some Feedback so that we can improve your experIEnce?"); FeedbackSettings.setYourComments("Type your question here..."); FeedbackSettings.setTitle("Feedback Dialog Title"); //TOAST MESSAGE FeedbackSettings.setToast("Thank you so much!"); FeedbackSettings.setToastDuration(Toast.LENGTH_SHORT); // Default FeedbackSettings.setToastDuration(Toast.LENGTH_LONG); //RAdio buttonS FeedbackSettings.seTradiobuttons(false); // disables radio buttons FeedbackSettings.setBUGLabel("BUG"); FeedbackSettings.setIDeaLabel("IDea"); FeedbackSettings.setQuestionLabel("Question"); //RAdio buttonS ORIENTATION AND GraviTY FeedbackSettings.setorIEntation(linearLayout.HORIZONTAL); // Default FeedbackSettings.setorIEntation(linearLayout.VERTICAL); FeedbackSettings.setGravity(Gravity.RIGHT); // Default FeedbackSettings.setGravity(Gravity.left); FeedbackSettings.setGravity(Gravity.CENTER); //SET DIALOG MODAL FeedbackSettings.setModal(true); //Default is false //DEVELOPER REPLIES FeedbackSettings.setReplyTitle("Message from the Developer"); FeedbackSettings.setReplyClosebuttonText("Close"); FeedbackSettings.setReplyRatebuttonText("RATE!"); //DEVELOPER CUSTOM MESSAGE (NOT SEEN BY THE END USER) FeedbackSettings.setDeveloperMessage("This is a custom message that will only be seen by the developer!"); FeedBack.show(); } private voID openPageProfile() { // Todo auto-generated method stub Intent intent = new Intent(this, profileDetailsActivity.class); startActivity(intent); } private voID openPageBook() { // Todo auto-generated method stub } private voID openPageMessage() { // Todo auto-generated method stub } private voID openPageExperIEnce() { // Todo auto-generated method stub Intent intent = new Intent(this, MoodActivity.class); startActivity(intent); } public class MyLocationListener implements LocationListener { @OverrIDe public voID onLocationChanged(Location loc) { // Todo auto-generated method stub double lati = loc.getLatitude(); double longi = loc.getLongitude(); ParseUser currentUser = ParseUser.getCurrentUser(); currentUser.saveInBackground(); ParseGeoPoint point = new ParseGeoPoint(lati, longi); currentUser.put("location", point); currentUser.saveInBackground(new SaveCallback() { @OverrIDe public voID done(ParseException e) { setProgressbarIndeterminateVisibility(false); if (e == null) { // Success! } else { } } }); } @OverrIDe public voID onProvIDerDisabled(String provIDer) { // Todo auto-generated method stub Toast.makeText(getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onProvIDerEnabled(String provIDer) { // Todo auto-generated method stub Toast.makeText(getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onStatusChanged(String provIDer, int status, Bundle extras) { // Todo auto-generated method stub } }}如果您需要任何澄清,请告诉我.
提前致谢.
更新资料
我尝试使用单一更新来代替,但似乎不起作用.
在onCreate下
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); LocationListener mlocListener = new MyLocationListener(); mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, Looper.myLooper());和
public class MyLocationListener implements LocationListener { @OverrIDe public voID onLocationChanged(Location loc) { // Todo auto-generated method stub double lati = loc.getLatitude(); double longi = loc.getLongitude(); ParseUser currentUser = ParseUser.getCurrentUser(); currentUser.saveInBackground(); ParseGeoPoint point = new ParseGeoPoint(lati, longi); currentUser.put("location", point); currentUser.saveInBackground(new SaveCallback() { @OverrIDe public voID done(ParseException e) { setProgressbarIndeterminateVisibility(false); if (e == null) { // Success! } else { } } }); } @OverrIDe public voID onProvIDerDisabled(String provIDer) { // Todo auto-generated method stub Toast.makeText(getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onProvIDerEnabled(String provIDer) { // Todo auto-generated method stub Toast.makeText(getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show(); } @OverrIDe public voID onStatusChanged(String provIDer, int status, Bundle extras) { // Todo auto-generated method stub } }}解决方法:
当您调用LocationManager.requestLocationUpdates()时,系统将通过该调用中给定的LocationListener不断提供位置更新.
如果您只想获取一个位置更新,则有两种选择:
>使用LocationManager.requestSingleUpdate()
>使用LocationManager.requestLocationUpdates(),但在收到第一个更新后取消更新.
我将继续使用2,因为您已经有一些代码.您需要首先将变量mLocManager声明为类字段,而不是在onCreate()中本地声明它.然后,您需要在LocationListener中添加以下代码.
public class MyLocationListener implements LocationListener { @OverrIDe public voID onLocationChanged(Location loc) { double lati = loc.getLatitude(); double longi = loc.getLongitude(); mlocManager.remoteUpdates(this); // ADD THIS STATEMENT // The rest of your code goes here ... } } 总结 以上是内存溢出为你收集整理的java-使用GPS位置全部内容,希望文章能够帮你解决java-使用GPS位置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)