我按照this以编程方式启用GPS
所以这里使用Ok和取消Buttons
所以,如果用户按下取消按钮应用程序将退出,如果他按下确定应用程序将与GPS正常工作。
这里在我的应用程序中我有12项活动,所有活动都需要GPS(位置)
通过该示例,其工作正常,但如果用户手动禁用GPS我该怎么办?我需要为所有12个活动添加相同的代码......? 任何人都可以建议我如何在每项活动中打开或关闭GPS状态,如果用户在打开活动后禁用GPS应用程序应关闭......
我已经试过这个,但它只工作了一次
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == 1000) {
if(resultCode == Activity.RESULT_OK)
{
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
finish();
System.exit(0);
}
}
}
答案 0 :(得分:1)
在您的应用程序开始时,让用户使用您编写的代码启用他的GPS。
然后,像这样创建一个BroadcastReceiver
public class GPSChangedReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "GPS status changed", Toast.LENGTH_SHORT).show();
// Your code to enable GPS again
// Give Alert to eneable GPS again
// Any other task that you want to perform
}
}
并在manifest.xml
<receiver android:name=".GPSChangedReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
每次用户更改GPS状态时都会调用此BroadcastReceiver
,所以现在每当用户尝试打开/关闭他的GPS时,广播就会被调用,你可以给他提供警报对话或强迫他启用他的GPS。
答案 1 :(得分:0)
仅在启动应用启动时的活动(例如onResume
)中请求权限,即在AndroidManifest.xml中定义intent-filter
的活动。
答案 2 :(得分:0)
创建一个BaseActivity并通过此BaseActivity扩展所有12个活动
在基地进行所有与地点相关的工作
答案 3 :(得分:0)
您可以创建BaseActivity.class并在所有活动中扩展它。然后在onAesume of BaseActivity中添加位置检查对话框并相应地导航用户。
答案 4 :(得分:0)
使用此方法检查位置是否启用。
您可以在onStart()
int locationMode = 0;
String locationProviders;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
locationMode = Settings.Secure.getInt(
context.getContentResolver(),
Settings.Secure.LOCATION_MODE);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
return locationMode != Settings.Secure.LOCATION_MODE_OFF;
} else {
locationProviders = Settings.Secure.getString(
context.getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
return !TextUtils.isEmpty(locationProviders);
}
返回该值,如果未启用,则使用以下方法
public void showGPSAlert() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.location_not_enabled); // GPS not found
builder.setMessage(R.string.location_access_enable); // Want to enable?
builder.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent viewIntent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(viewIntent, LOCATION_ENABLED);
}
});
builder.create().show();
return;
}
答案 5 :(得分:0)
在一个共同的地方(比如所有12项活动的BaseActivity) 您可以注册以收听GPS状态
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.addGpsStatusListener(new android.location.GpsStatus.Listener()
{
public void onGpsStatusChanged(int event)
{
switch(event)
{
case GPS_EVENT_STARTED:
// GPS is switched ON
break;
case GPS_EVENT_STOPPED:
// GPS is switched off
break;
}
}
});