Android:isProviderEnabled(LocationManager.NETWORK_PROVIDER)不起作用,仅isProviderEnabled(LocationManager.GPS_PROVIDER)

时间:2018-07-27 19:11:32

标签: android gps location

当我在手机上运行我的应用程序时,我只能看到GPS_PROVIDER正常工作。只有触发GPS_PROVIDER时,NETWORK_PROVIDER才会触发。 这是代码

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

    final LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);

    if (!lm.isProviderEnabled(locationProvider)) {
        networkCheck();
    }

    // Get Location Manager and check for GPS & Network location services
    if (!lm.isProviderEnabled(gpsProvider)) {
        gpsCheck();

    }


 private void networkCheck() {
    Toast.makeText(MainActivity.this, "NETWORK!!!!", Toast.LENGTH_SHORT);

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    View mView = getLayoutInflater().inflate(R.layout.activity_internet_access_alert_dialog, null);
    Button positiveBtn = (Button) mView.findViewById(R.id.positiveNetworkBtn);
    final Button negativeBtn = (Button) mView.findViewById(R.id.negativeNetworkBtn);
    builder.setView(mView);
    final AlertDialog networkDialog = builder.create();
    positiveBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            networkDialog.dismiss();

        }
    });

    negativeBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
            System.exit(0);
        }
    });
    networkDialog.setCancelable(false);
    networkDialog.setCanceledOnTouchOutside(false);
    networkDialog.show();
}

public void gpsCheck(){

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    View mView = getLayoutInflater().inflate(R.layout.activity_gps_alert_dialog, null);
    Button positiveBtn = (Button) mView.findViewById(R.id.positiveBtn);
    final Button negativeBtn = (Button) mView.findViewById(R.id.negativeBtn);
    builder.setView(mView);
    final AlertDialog dialog = builder.create();
    positiveBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Show location settings when the user acknowledges the alert dialog
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent);
            dialog.dismiss();

        }
    });

    negativeBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
            System.exit(0);
        }
    });
    dialog.setCancelable(false);
    dialog.setCanceledOnTouchOutside(false);
    dialog.show();


}

我注意到,如果在手机上启用了定位(GPS_ENABLED)并且还启用了网络数据,则不会弹出NETWORK_PROVIDER(这是正确的),但是如果启用了我的位置并且禁用了网络数据,则NETWORK_PROVIDER也不会弹出...有什么想法吗?

1 个答案:

答案 0 :(得分:0)

都是位置提供者的类型

NETWORK_PROVIDER 网络位置提供商的名称。

GPS_PROVIDER GPS位置提供商的名称。

我认为您正在考虑将NETWORK_PROVIDER作为移动数据,否? 禁用移动数据并不意味着您要禁用LocationManager.NETWORK_PROVIDER

根据您在此处输入的代码,测试是否仅移动数据被打开/关闭或是否将网络 WIFI或移动数据打开/关闭关闭。

public class ConnectivityUtils {

    // Returns TRUE any network mobile data or WIFI turned on otherwise returns FALSE
    public static boolean isNetworkConnected(@NonNull Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    }

    // Returns TRUE only if mobile data is turned on otherwise returns FALSE
    public static boolean isMobileDataConnected(@NonNull Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        return mobile != null && mobile.isConnectedOrConnecting();
    }
}