为应用

时间:2018-02-07 10:19:12

标签: android gps

我按照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);
        } 
    } 
} 

6 个答案:

答案 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;
        }
    }
});