2012-07-14 6 views
5

मुझे नहीं पता कि आपने अद्भुत मायट्रैक अपडेट देखा है, लेकिन यह Google Earth ऐप में एक kml फ़ाइल भेजने और Google ऐप के अंदर प्रदर्शित करने की अनुमति देता है (यदि निश्चित रूप से इंस्टॉल किया गया है)।मैं Google धरती पर एक kml फ़ाइल कैसे भेज सकता हूं, जैसे MyTracks (ओपन सोर्स) करते हैं?

enter image description here

स्रोत कोड है: http://code.google.com/p/mytracks/source/browse/

लेकिन मैं जिस तरह से ऐसी बात प्राप्त करने के लिए नहीं मिल रहा।

मुझे लगता है कि मैं यहाँ कुछ पाया:

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); 

लेकिन इसके बाद के संस्करण कोड बस इस कोड से एक ही परिणाम के साथ पथ प्रदर्शित करता है:: 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 mapIntent = new Intent(Intent.ACTION_VIEW); 
    Uri uri1 = Uri.parse("file:///sdcard/test.kml"); 
    mapIntent.setData(uri1); 
    startActivity(Intent.createChooser(mapIntent, "Sample")); 

मेरा उद्देश्य "play" के साथ एक ही परिणाम प्राप्त करना है, लेकिन मेरा उद्देश्य है टन।

उत्तर

6

आपको निम्न केएमएल फ़ाइल और केएमएल एमआईएम प्रकार के लिए यूआरआई निर्दिष्ट करने की आवश्यकता है।

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::setData और Intent::setType उपयोग करने के लिए (वे एक दूसरे को ओवरराइड) सुनिश्चित करें

"my_track" आपके स्थलचिह्न आईडी का संदर्भ है। इरादा अतिरिक्त स्वचालित रूप से दौरे शुरू करता है।

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

डिस्क से किमील की बजाय एक लिंक का उपयोग करना संभव है? कुछ इस तरह:

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

धन्यवाद

1

आप लक्षित कर रहे हैं एंड्रॉयड एन, आप एक फ़ाइल को भेजने की अनुमति नहीं है। android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData() पर निर्देशों का प्रयोग करें, और Intent.FLAG_GRANT_READ_URI_PERMISSION ध्वज जोड़ें।

+0

क्या एंड्रॉइड 5 से 6 में कोई बदलाव आया था? मेरा ऐप एंड्रॉइड 5 में Google धरती में एक केएमएल खोल सकता है। एंड्रॉइड 6 में, Google धरती खुलती है, लेकिन जाहिर है कि यह केएमएल फाइल नहीं मिली है? –

संबंधित मुद्दे