2012-07-14 22 views
5

驚くべきMytrackアップデートを見たことがあるかどうかは分かりませんが、kmlファイルをGoogle Earthアプリに送信し、Googleアプリ内に表示することができます(インストールされている場合はもちろん)。MyTracks(オープンソース)のようにkmlファイルをGoogle Earthに送信するにはどうすればよいですか?

enter image description here

ソースコードがあります:http://code.google.com/p/mytracks/source/browse/

が、私はそのようなことを達成するための方法を見つけることができません。

私はここで何かを見つけたと思う:http://code.google.com/r/jshih-mytracks3/source/browse/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java?spec=svn5178eb75934b7f0c4c23ec26b7d79a0787de18b8&r=5178eb75934b7f0c4c23ec26b7d79a0787de18b8

else if (playTrack) { 
     Intent intent = new Intent() 
      .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK) 
      .putExtra(GOOGLE_EARTH_TOUR_FEATURE_ID, KmlTrackWriter.TOUR_FEATURE_ID) 
      .setClassName(GOOGLE_EARTH_PACKAGE, GOOGLE_EARTH_CLASS) 
      .setDataAndType(Uri.fromFile(new File(savedPath)), GOOGLE_EARTH_KML_MIME_TYPE); 
     startActivity(intent); 

ハードコードされた方法は、このコードを与える:

Intent intent = new Intent() 
      .addFlags(
        Intent.FLAG_ACTIVITY_CLEAR_TOP 
          | Intent.FLAG_ACTIVITY_NEW_TASK) 
      .putExtra("com.google.earth.EXTRA.tour_feature_id","tour") 
      .setClassName("com.google.earth", "com.google.earth.EarthActivity") 
      .setDataAndType(Uri.fromFile(new File("/sdcard/test.kml")), 
        "application/vnd.google-earth.kml+xml"); 
    startActivity(intent); 

しかし、上記のコードは、単純にこのコードよりも、同じ結果にパスが表示されます。

Intent mapIntent = new Intent(Intent.ACTION_VIEW); 
    Uri uri1 = Uri.parse("file:///sdcard/test.kml"); 
    mapIntent.setData(uri1); 
    startActivity(Intent.createChooser(mapIntent, "Sample")); 

私の目的は、「再生」を使用して同じ結果を得ることですトン。

答えて

6

KMLファイルおよびのURIを次のように指定する必要があります。

File file = new File(Environment.getExternalStorageDirectory(), "sample_tour.kml"); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(file), "application/vnd.google-earth.kml+xml"); 
intent.putExtra("com.google.earth.EXTRA.tour_feature_id", "my_track"); 
startActivity(intent); 

これは現在文書化されていませんが、これを修正する予定です。

Intent::setDataAndTypeで、Intent::setDataIntent::setTypeではなく、それぞれ別のものを上書きしてください。

「my_track」は、目印IDへの参照です。目的は自動的にツアーを自動的に開始します。

<Placemark id="my_track"> 
<gx:Track> 
    ... 
</gx:Track> 
</Placemark> 
3

ディスクからkmlの代わりにリンクを使用することはできますか?このような 何か:

intent.setDataAndType(Uri.parse("http://sites.cyclingthealps.com/other/downloads/doc.kml"), "application/vnd.google-earth.kml+xml");

おかげ

0
File KML = new File("/sdcard/doc.kml"); 
Intent i = getPackageManager().getLaunchIntentForPackage("com.google.earth"); 
i.setDataAndType(Uri.fromFile(KML), "xml"); 
startActivity(i); 

ソース:もう//目的:あなたがAndroidのNをターゲットにしている場合は、ファイルを送信することが許可されていないhttp://enladodelbien.blogspot.com/2015/06/kmlkmz-to-google-earth.html

1

android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData()の手順を使用し、Intent.FLAG_GRANT_READ_URI_PERMISSIONフラグを追加します。

+0

Android 5から6への変更もありましたか?私のアプリはAndroid 5のGoogle EarthでKMLを開くことができます.Android 6では、Google Earthが開きますが、明らかにKMLファイルが届きませんでしたか? –

関連する問題