【发布时间】:2016-12-29 20:07:31
【问题描述】:
我希望用户按下按钮,按下按钮后 gps 应该在后台自动获取坐标,因为你知道 gps 可能需要几分钟来获取坐标,我只是希望 gps 慢慢来,在获取坐标后然后执行一个名为'SendLocationSms',
如果我在 doInBackground 中使用 onLocationChanged 方法,则会出现错误, 或者如果我不使用异步任务获取坐标,那么我必须等待坐标,获取后我可以按下按钮执行方法 SendLocationSms,
我希望用户只需要在 gps 开启时按下一个按钮,然后 gps 会花费它获取坐标所需的时间,然后在获取坐标后自动运行我想要的方法而不会注意到用户。
基本上我正在开发一个应用程序,该应用程序在按下警报按钮时通过短信发送用户的位置,用户只需打开 gps 并按下警报按钮,应用程序应该完成其余的工作,我不希望用户等到 gps 获取坐标到发送警报。
请帮帮我
public class MainActivity extends AppCompatActivity implements LocationListener {
private LocationManager n;
private double lat;
private double lot;
private Button save;
private TextView textSMS;
private String gps;
private String sms;
public Button con;
DatabaseHelper myDb;
String id, cell1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
con = (Button) findViewById(R.id.con);
con.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, Contacts.class);
startActivity(i);
}
});
myDb = new DatabaseHelper(this);
Cursor c = myDb.getAllData();
c.moveToFirst();
cell1 = (c.getString(1));
save = (Button) findViewById(R.id.save);
textSMS = (TextView) findViewById(R.id.editTextSMS);
textSMS.setText("Help me please im at: [location]");
sms="Help me please im at: ";
n = (LocationManager) getSystemService(LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
n.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 100, this);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if ( gps != null ) {
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(cell1.toString(), null, sms + gps, null, null);
Toast.makeText(getApplicationContext(), "Your message sent successfuly !",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(),
"SMS failddddd!",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
});
}
@Override
public void onLocationChanged(final Location l) {
this.lat=l.getLatitude();
this.lot=l.getLongitude();
this.gps = "\n" +
"www.google.com/maps/place/"+lat+","+lot;
TextView locc = (TextView) findViewById(R.id.locc);
locc.setTextColor(Color.GREEN);
locc.setText("New Location Fetched !");
Toast.makeText(getApplicationContext(), "Location done", Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(getBaseContext(),"Gps enabled",Toast.LENGTH_LONG).show();
}
@Override
public void onProviderDisabled(String provider) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
Toast.makeText(getBaseContext(), "Gps is turned off!! ",
Toast.LENGTH_SHORT).show();
}
public void showMessage(String title,String Message){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setTitle(title);
builder.setMessage(Message);
builder.show();
}
}
听着,点击活动中的按钮时,我想通过短信发送经度和纬度,我打开 gps,然后按下按钮,但你知道 gps 需要一两分钟来获取坐标,所以如果我之前按下按钮获取坐标当然它会以纬度和经度的形式发送空值,所以我希望如果仍然 gps 没有得到坐标但用户按下了按钮,那么应用程序应该等到获取位置,然后发送包含纬度和经度的短信。所以这是细节:)希望现在你能帮助我,非常感谢
【问题讨论】:
-
你可以使用 IntentService
-
如果你是安卓新手,请详细告诉我
-
如果您确实需要在后台执行此操作,则 Intent 服务可以访问通过 Activity 访问的所有内容,并且它可以在您的后台运行。但这里真正的问题是为什么需要在后台执行此操作?您可以将代码直接放入 onLocationChanged 或 onConnected
-
@JawadLeWywadi 如果用户按下警报按钮,我想通过短信发送位置,而不是每次获取位置时,:) 请告诉解决方案
标签: android android-asynctask gps location android-gps