我有一个LocationActivity可以从Google API获取GPS位置。我需要在我的MainActivity中使用这些数据。我正在使用startActivityForResult来完成此操作,但是当我尝试访问数据时,我的LocationActivity从不执行,并且我的应用程序崩溃。startActivityForResult没有开始第二个活动
这里是从MainActivity.java一些相关片段:
public void onUpdateClick(View v) { //button click handler which starts the process
Intent i = new Intent(MainActivity.this, LocationActivity.class);
startActivityForResult(i, GPS_DATA_REQUEST);
byte[] data = latitude.getBytes(); //app crashes here because latitude is null
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == GPS_DATA_REQUEST) {
if(resultCode == Activity.RESULT_OK){
latitude=data.getStringExtra("latitude");
}
}
}
这里是相关的片段从LocationActivity.java:
@Override
public void onConnected(Bundle bundle) {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest,this);
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
latitude = String.valueOf(mLastLocation.getLatitude());
}
Intent returnIntent = new Intent();
returnIntent.putExtra("latitude",latitude);
setResult(LocationActivity.RESULT_OK, returnIntent);
finish();
}
我的Android清单:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/label_broadcast">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LocationActivity">
</activity>
</application>
我已经提到了很多线程和Android活动/意图文档,但一直未能解决这个问题。任何帮助/建议,将不胜感激。我曾尝试仅提供相关信息。谢谢!
发布你的logcat – sasikumar
你不能期望在'startActivityForResult'之后立即得到结果。结果将在'onActivityResult'中被接收。 Android基础知识 – SMR
@SMR说你不能在'startActivityForResult'之后立即得到结果。你需要在'onActivityResult'中获得你的纬度,所以当你接收到纬度时,'onActivityResult'方法中的其他代码会再次请求纬度。 – Shailesh