- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:画面遷移について)
カメラ画面から元のMap画面に画面遷移させる方法は?
このQ&Aのポイント
- 質問者は、現在地情報を表示するアプリを作成中です。カメラ画面から元のMap画面に画面遷移させたいですが、どのように実装すればよいか悩んでいます。
- 一般的には、Activity間の画面遷移にはIntentを使用しますが、この場合はどのように実装すれば良いでしょうか?質問者は、HandlerクラスのメンバをSurfaceViewを継承したクラスで用意して、Activityに対してそのクラスを呼び出すコードを実装する方法を考えています。
- 質問者は、初対面での質問になるため、申し訳なさを感じながらも、早急な回答をお待ちしています。プログラムコードが必要であれば、提供することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#177743
回答No.1
既に撮影の部分はできているのですね。そこで撮影した後、Intentで戻る処理ということですね。 Handlerがここで出てくるのがちょっとよくわからないのですが……。Handlerはマルチスレッド処理などで用いるもので、ここではあまり関係がないように思えます。 単純に戻るだけなら、Intentを作成し、putExtraで必要な情報を設定して起動するだけと思いますが。 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("appication/sampledata"); intent.putExtra("sampledata",new SampeData()); // SampleDataを送る this.startActivity(intent); こんな感じでSampleDataを送れますから、起動したActivityのonCreateでそれを取得し利用すればいいでしょう。 Intent intent = this.getIntent(); if (intent.getAction().equals(Intent.ACTION_SEND)){ SampleData sampledata = (SampleData)intent.getSerializableExtra("sampledata"); } これで、SampleDataを受け渡せますね。SampleData内に位置情報や撮影した写真のイメージファイルのパスなどを保管して受け渡せば、必要な情報は起動したActivityで得られます。後はそれを元にマップにマーカーを追加し表示すれば良いと思います。
お礼
chiiba kunさん 回答ありがとうございます。 Hanlderは関係ないんですね(笑) 失礼しました。 Intentしか画面遷移をさせる方法はないんでしょうか…? これまでに色々と画面遷移については調べてきましたが、Intentぐらいしか見たことない気がします。調べ不足かもしれませんが。 ちなみに、撮影した後に、その画像の情報から緯度、経度を取得して、元の地図画面に戻って取得情報を基に現在地を写真付きで表示させる、という仕組みをいま考えております。 このコード参考にさせていただきます。重ねてお礼申し上げます。ありがとうございました! またわからないことありましたらここで質問します!
補足
朝早い時間帯でのご回答、ありがとうございました。 今回答を基に実装をしているのですが、つまずいている箇所があるので再度質問するとともに、ソースコードを添付いたします。 Mapクラス(初期画面 ここで写真と現在地を表示する) package com.example.maps2; import android.content.Intent; import android.location.LocationManager; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.MyLocationOverlay; public class Maps_go extends MapActivity { MyLocationOverlay myLocationOverlay; MapView mapview; MapController controller; MapView map; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps_go); mapview=(MapView)findViewById(R.id.mapview); mapview.setBuiltInZoomControls(true); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(Maps_go.this,Camera.class); startActivity(intent); // TODO 自動生成されたメソッド・スタブ } }); controller = mapview.getController(); controller.setZoom(17); myLocationOverlay = new MyLocationOverlay(getApplicationContext(),mapview); myLocationOverlay.onProviderEnabled(LocationManager.GPS_PROVIDER); myLocationOverlay.enableMyLocation(); myLocationOverlay.runOnFirstFix(new Runnable() { @Override public void run() { controller.animateTo(myLocationOverlay.getMyLocation()); // TODO 自動生成されたメソッド・スタブ } }); mapview.getOverlays().add(myLocationOverlay); mapview.invalidate(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_maps_go, menu); return true; } @Override protected boolean isRouteDisplayed() { // TODO 自動生成されたメソッド・スタブ return true; } } 全部貼れなかったので再度追記します。