【问题标题】:setText in app when GPS enabled/disabled in device设备中启用/禁用 GPS 时应用程序中的 setText
【发布时间】:2021-04-05 14:50:56
【问题描述】:

我正在使用以下代码根据用户打开/关闭网络和 GPS 的时间更改两个文本视图。我能够让网络文本视图工作,但不能让位置文本视图工作。我想我使用了错误的过滤器,但我不知道改用哪个过滤器。有什么建议/答案吗?

public class MainActivity extends AppCompatActivity {

TextView networkTextView;
TextView locationTextView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    networkTextView = findViewById(R.id.networkTextView);
    locationTextView = findViewById(R.id.locationTextView);

    IntentFilter filter1 = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(broadcastReceiver1, filter1);

    IntentFilter filter2 = new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION);
    registerReceiver(broadcastReceiver2, filter2);
}

BroadcastReceiver broadcastReceiver1 = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
            boolean noNetworkConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            if (noNetworkConnectivity) {
                networkTextView.setText("Disconnected");
            } else {
                networkTextView.setText("Connected");
            }
        }
    }
};

BroadcastReceiver broadcastReceiver2 = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (LocationManager.PROVIDERS_CHANGED_ACTION.equals(intent.getAction())) {
            boolean noLocationConnectivity = intent.getBooleanExtra(LocationManager.PROVIDERS_CHANGED_ACTION, false);
            if (noLocationConnectivity) {
                locationTextView.setText("Disconnected");
            } else {
                locationTextView.setText("Connected");
            }
        }
    }
};

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(broadcastReceiver1);
    unregisterReceiver(broadcastReceiver2);
}
}

更新:

在我替换的位置的广播接收器中

boolean noLocationConnectivity = intent.getBooleanExtra(LocationManager.PROVIDERS_CHANGED_ACTION, false);

LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
                boolean locationConnectivity = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

但这没有用。可能需要向用户请求位置数据权限?

更新 2:

意识到它正在注册 LocationManager.GPS_provider 的布尔更改,但最初不是。只有在应用启动后手动更改位置设置后,文本才会更改,这与应用启动后立即更改文本的网络检查不同。

【问题讨论】:

    标签: java android broadcastreceiver android-gps


    【解决方案1】:

    我认为这个问题已经回答了here

    但我在想是否使用 LocationManagerLocationListener 是个好主意,我的意思是,LocationListener 有那些被覆盖的方法:

    @Override
    public void onProviderEnabled(String provider) {
    
    }
    
    @Override
    public void onProviderDisabled(String provider) {
    
    }
    

    我留给你考虑

    【讨论】:

    • 这两个覆盖没有为我注册位置设置的更改。从帖子中,他们实际上做了我使用相同过滤器所做的事情,我可以进入 LocationManager.PROVIDERS_CHANGED_ACTION.equals(intent.getAction()) 但布尔 noLocationConnectivity = intent.getBooleanExtra(LocationManager.PROVIDERS_CHANGED_ACTION, false);没用,所以我不能有条件地更改文本。
    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2016-07-07
    • 2012-07-29
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多