Android:isProviderEnabled(LocationManager.NETWORK_PROVIDER) 不起作用。只有 isProviderEnabled(LocationManage
Posted
技术标签:
【中文标题】Android:isProviderEnabled(LocationManager.NETWORK_PROVIDER) 不起作用。只有 isProviderEnabled(LocationManager.GPS_PROVIDER)【英文标题】:Android:isProviderEnabled(LocationManager.NETWORK_PROVIDER) doesn't work.Only isProviderEnabled(LocationManager.GPS_PROVIDER) 【发布时间】:2019-01-04 22:42:31 【问题描述】:当我在手机上运行我的应用程序时,我可以看到只有 GPS_PROVIDER 工作正常。NETWORK_PROVIDER 仅在 GPS_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】:两者都是位置提供者的类型
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();
【讨论】:
我只想在禁用移动数据时给我一个警报对话框。有没有办法做到这一点而不是检查NETWORK_PROVIDER是否被禁用? 感谢您澄清您的问题,因此已使用代码示例编辑了我之前的答案,如果适合您,请查看并更新答案为已接受。 好的,我会试试你提供的代码!还有一件事......我应该如何调用这个类?我的意思是我应该在 () 里面放什么参数?对不起,我是新手 :D 只需要传递应用程序上下文,在您的情况下,从if (!ConnectivityUtils.isNetworkConnected(this)) // show your dialog
等活动调用此方法
现在活动 onCreate 方法应该是这样的 @Override public void onCreate(Bundle savedInstanceState) if (!ConnectivityUtils.isNetworkConnected(this)) // Show your own dialog here Toast.makeText(this, "You are not connected,Connect to wifi or mobile data and try again", Toast.LENGTH_SHORT).show(); return;
如果对你有用,请告诉我,不要忘记接受答案以上是关于Android:isProviderEnabled(LocationManager.NETWORK_PROVIDER) 不起作用。只有 isProviderEnabled(LocationManage的主要内容,如果未能解决你的问题,请参考以下文章