【发布时间】:2016-06-23 18:34:44
【问题描述】:
我为 Android 编写了一个应用程序,它在手机重启后立即(大约 5 秒内)启动时出现问题(崩溃)。由于某种原因,第二次调用 OnCreate 方法。我认为这可能是问题所在,但经过研究,我发现android系统可能会在启动后调用onCreate,因为它仍在启动系统服务 - 例如获取“MCM”。
在我的 MainActivity 应用程序中,我有一个通过 XML 绑定的静态绑定片段。片段中有代码检查是否授予了位置权限:
if (ActivityCompat.checkSelfPermission(this.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
问题是,this.getContext() 返回 null!这肯定与多次调用 onCreate 的事实有关,因为当手机未启动时,只有在应用程序正常运行时才会调用 onCreate!
这是我在 mainActivity 的 onCreate 方法中对片段的唯一引用:
android.support.v4.app.Fragment fragMap = getSupportFragmentManager().findFragmentById(R.id.mv_1);
if (fragMap instanceof FragmentMap)
{
theMap = (FragmentMap) fragMap;
}
这里是通过XML绑定的片段:
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/mv_1"
android:name="com.sunhillo.personneltrackerv002.FragmentMap"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="64dp"/>
非常感谢您提供的任何帮助!我对 Android 编程还是很陌生,并且正在尝试学习细节!
【问题讨论】:
-
在Fragment的哪个方法中进行权限检查?
-
@jaibatrik 它在我的 compareLocations 方法中。此方法将地图相机的位置与用户在地图上的当前位置进行比较。我在其他地方也有支票,但这是第一次打电话。如果我没记错的话,有必要在创建位置管理器之前检查您是否仍有权限(出于此应用程序的目的)。我在片段中创建了一个位置管理器,以便将地图重新定位到用户...
标签: java android android-layout android-fragments android-xml