打开 GPS 时出现异常 [重复]
Posted
技术标签:
【中文标题】打开 GPS 时出现异常 [重复]【英文标题】:Exception while turning on GPS [duplicate] 【发布时间】:2017-05-13 15:27:25 【问题描述】:这是我的代码:
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", true);
sendBroadcast(intent);
这是 logcat 中的错误:
致命异常:主要 进程:com.example.satyajittarafdar.gps_on_automatic,PID:20469 java.lang.RuntimeException:无法启动活动 组件信息com.example.satyajittarafdar.gps_on_automatic/com.example.satyajittarafdar.gps_on_automatic.MainActivity: java.lang.SecurityException:权限拒绝:不允许发送 从 pid=20469 广播 android.location.GPS_ENABLED_CHANGE, uid=10240 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2429) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5459) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 引起:java.lang.SecurityException:权限拒绝:不允许 从 pid=20469 发送广播 android.location.GPS_ENABLED_CHANGE, uid=10240 在 android.os.Parcel.readException(Parcel.java:1620) 在 android.os.Parcel.readException(Parcel.java:1573) 在 android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3128) 在 android.app.ContextImpl.sendBroadcast(ContextImpl.java:767) 在 android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:396) 在 com.example.satyajittarafdar.gps_on_automatic.MainActivity.onCreate(MainActivity.java:19) 在 android.app.Activity.performCreate(Activity.java:6259) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2382) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5459) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
【问题讨论】:
【参考方案1】:这不能作为公共 API 使用,并且您无法从 Android 4.4 及更高版本以编程方式更改 GPS 状态。您已准备好意图并将用户重定向到设置。
startActivity(context, new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
这里有一些参考:
https://***.com/a/22529296/3758024
https://***.com/a/20236331/3758024
【讨论】:
但是在使用默认的谷歌地图时,如果你的 GPS 关闭,那么它会自动打开,只显示一个警告对话框消息...它不需要设置来使其打开 这是手动开启 gps 的代码,其工作完美 Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);开始活动(我的意图);但我不想通过设置使其开启。如果有任何代码,请帮助我。提前感谢【参考方案2】:自 android 版本 4.4 起,您无法以编程方式更改 gps 状态。
很好的解释为什么:Read this post
您应该这样做是使用意图将用户发送到 phoen 设置并请求他手动启用它。
【讨论】:
但是在使用默认谷歌地图时,如果你的 GPS 是关闭的,那么它会自动打开,只显示一个警报对话框消息...它不会需要设置来使其打开。跨度> 这是手动开启 gps 的代码,其工作完美 Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);开始活动(我的意图);但我不想通过设置使其开启。如果有任何代码,请帮助我。提前感谢以上是关于打开 GPS 时出现异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Android N 中调用位置时出现空点异常。 [重复]
向列表视图添加页脚时出现Indexoutofbound异常[重复]