当前位置: 首页 > 知识库问答 >
问题:

MapBox onCreate实例在启动android Java时崩溃

章阳波
2023-03-14

所以我创建一个MapBox实例在AndroidJava。

我使用的版本:

'com.mapbox.mapboxsdk:mapbox-android-sdk:9.0.0'

这是我的以下代码:

Androidanifest.xml

...
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    ...

activity_main.xml

   <com.mapbox.mapboxsdk.maps.MapView
        android:id="@+id/mapview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

应用爪哇:

public class Application extends AppCompatActivity implements LocationListener
{
   ....

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        /* Initialise Mapbox Services */
        Mapbox.getInstance(this, this.getResources().getString(R.string.mapbox_token));

        /* Set Layout Content View  */
        Application.this.setContentView(R.layout.activity_main);

        /* Set MapView to Instances of the current activity */
        Application.this.mapView = (MapView) this.findViewById(R.id.mapview);
        Application.this.mapView.onCreate(savedInstanceState); // THIS CAUSE ERROR
    }
    ...
    ... // Some code here

}

怀疑行应用程序有问题。这地图视图。onCreate(savedInstanceState) 是导致错误的原因之一。

我试图做它的原始,(意味着没有遵循公司的编码准则)。例外情况依然存在。

我得到的例外是:


2022-01-21 23:04:48.816 21806-21806/my.com.johnmelody.emergenciesresponsedemo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: my.com.johnmelody.emergenciesresponsedemo, PID: 21806
    java.lang.RuntimeException: Unable to start activity ComponentInfo{my.com.johnmelody.emergenciesresponsedemo/my.com.johnmelody.emergenciesresponsedemo.Application}: java.lang.SecurityException: getDataNetworkTypeForSubscriber
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3479)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3651)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2104)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:236)
        at android.app.ActivityThread.main(ActivityThread.java:7861)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
     Caused by: java.lang.SecurityException: getDataNetworkTypeForSubscriber
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2376)
        at android.os.Parcel.createException(Parcel.java:2360)
        at android.os.Parcel.readException(Parcel.java:2343)
        at android.os.Parcel.readException(Parcel.java:2285)
        at com.android.internal.telephony.ITelephony$Stub$Proxy.getNetworkTypeForSubscriber(ITelephony.java:8764)
        at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:3034)
        at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:2998)
        at com.mapbox.android.telemetry.TelemetryUtils.obtainCellularNetworkType(TelemetryUtils.java:165)
        at com.mapbox.mapboxsdk.module.telemetry.PhoneState.<init>(PhoneState.java:39)
        at com.mapbox.mapboxsdk.module.telemetry.TelemetryImpl.onAppUserTurnstileEvent(TelemetryImpl.java:46)
        at com.mapbox.mapboxsdk.maps.MapView.onCreate(MapView.java:303)
        at my.com.johnmelody.emergenciesresponsedemo.Application.onCreate(Application.java:100)
        at android.app.Activity.performCreate(Activity.java:8109)
        at android.app.Activity.performCreate(Activity.java:8083)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3452)
    ```

Any idea, what I do wrong here? 


共有2个答案

燕朝明
2023-03-14

尝试让文档中的示例正常工作,然后继续。

https://docs.mapbox.com/android/maps/guides/install/

蓬长恨
2023-03-14

解决了的。

通过请求READ_PHONE_STATE权限解决。出于某种原因,Mapbox使用READ_PHONE_STATE。我在AndroidManifest.xml中声明,但是手动请求权限是至关重要的。

因此,解决办法是:

public void requestReadPhoneStatePermission(Activity activity)
{
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
        {
            if (ActivityCompat.checkSelfPermission(
                    activity,
                    Manifest.permission.READ_PHONE_STATE
            ) != PackageManager.PERMISSION_GRANTED)
            {
                ActivityCompat.requestPermissions(
                        activity,
                        new String[]{
                                Manifest.permission.READ_PHONE_STATE
                        },
                        0x1
                );
            }
        }
}

并在Application.java中调用

this.requestReadPhoneStatePermission(this);
 类似资料:
  • 由于某种原因,我的程序在完成线程后崩溃。启动方法。由于这是我第一次使用线程,我完全迷路了,不知道发生了什么。 并称之为踏面: 我会非常感激的! 我的日志显示如下(抱歉弄乱了): 10-22 14:59:43.319:E/AndroidRuntime(961):致命异常:Thread-81 10-22 14:59:43.319:E/AndroidRuntime(961):android。看法View

  • 我启动了minecraft forge,它崩溃了。所以我回到了发射器,minecraft在香草中运行良好,但它不会启动forge。 我试着查看文件,看看是否有问题,但没有发现任何问题。我试着下载了一个更新版本的forge,但也没用。我也尝试过java,但没有成功。 我使用的是minecraft forge 1.15.2版。 有人对如何解决这个问题有什么建议吗?

  • 我已经配置了我的日食(开普勒)IDE来开发亚马逊云应用程序和Android应用程序。当我重新启动它以反映更改时,它不会启动。日食窗口在选择工作区后自动关闭。早些时候,它在开发简单的Java应用程序时运行良好。 我的eclipse.ini文件如下所示 我认为是我的eclipse.ini文件中的某个东西迫使eclipse退出。PS。我使用的是ubuntu Linux 12.04

  • 问题内容: 我的服务器程序需要在EC2实例启动时启动。即时即时消息只是使用以下命令从我的SSH启动: 我尝试将其添加到.bashrc和/etc/rc.local文件中,但它们仅在我ssh进入时才起作用。 有人知道怎么做,以便在计算机启动时启动我的应用程序实例吗? 谢谢, 本 问题答案: 您可以创建如下脚本: 将您的脚本放在/etc/init.d目录下,然后使用以下命令: 通过使用有关 update

  • 我已经有3到4天没有使用Android Studio 2.3.2了,当我尝试启动它时,突然出现以下错误。请注意,一周前我单独安装了Android Studio 3.0 Canary 1,但一切正常,两个版本都可以正常工作。我不明白为什么我突然在启动Android Studio时遇到了问题。 我使用MacBook。 以下是Android Studio在发布时给出的错误日志: 谢谢你的帮助!

  • 我有一个问题。在过去的4-5周里,我一直在Eclipse中使用Android,并且虚拟机从未出现过问题(是的,它们很慢。但从未崩溃)。 现在,我相信,自从4.2开始为uni开发一个新项目(截止日期下周)以来,我的4.2虚拟机在启动时突然开始崩溃,因为“内核恐慌”(最后的响应)。 我想问一下我是否有什么可以做的,也许可以下载修补程序或其他什么。API和Eclipse都是最新的,或者我的计算机可能有什