私はGoogle APIからGPS位置情報を取得するLocationActivityを持っています。私はMainActivityでこのデータを使用する必要があります。私はこれを達成するためにstartActivityForResultを使用していますが、私のLocationActivityは実行されず、データにアクセスしようとするとアプリケーションがクラッシュします。ここでstartActivityForResultは第2アクティビティを開始していません
は、IS MainActivity.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のマニフェスト:
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から関連スニペットです
<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アクティビティ/インテントドキュメントを参照しましたが、これを解決できませんでした。どんな助力/提案も感謝します。私は関連情報のみを提供しようとしました。ありがとう!あなたが活動の時
byte[] data = latitude.getBytes();
を使用カント
logcat – sasikumar
を投稿すると、 'startActivityForResult'の直後に結果を得ることはできません。結果は 'onActivityResult'で受信されます。 Androidの基本 – SMR
@SMR say 'startActivityForResult'の直後に結果を得ることはできません。あなたは 'onActivityResult'であなたの緯度を受け取る必要があります。他のコードは' onActivityResult'メソッドで行います。もう一度緯度を受け取ったら、もう一度緯度を求めてください。 – Shailesh