打开 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 时出现异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从数组中删除重复项时出现超出范围异常

从firebase检索时出现空指针异常[重复]

在 Android N 中调用位置时出现空点异常。 [重复]

向列表视图添加页脚时出现Indexoutofbound异常[重复]

从应用程序创建 SQLite 数据库时出现空指针异常 [重复]

使用 VS 2015 打开 VS 2017 项目时出现语法错误 [重复]