4

我正在使用新的 Google map v2 模块在我的 android 应用程序中显示地图。我正在执行以下步骤。应用程序安装和工作正常。我面临的问题是视图内没有地图。

1)首先我下载了​​地图模块并放入以下文件夹。

/Users/fkamani/Library/Application\ Support/Titanium/modules/android/

2) 在 tiapp.xml 文件中添加地图模块。

<module platform="android">ti.map</module>

3) 在 tiapp.xml 中添加以下 android manifest

<android xmlns:android="http://schemas.android.com/apk/res/android">
        <manifest>
            <!-- Allows the API to download data from Google Map servers -->
            <uses-permission android:name="android.permission.INTERNET"/>
            <!-- Allows the API to cache data -->
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
            <!-- Use GPS for device location -->
            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
            <!-- Use Wi-Fi or mobile connection for device location -->
            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
            <!-- Allows the API to access Google web-based services -->
            <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
            <!-- Specify OpenGL ES 2.0 as a requirement -->
            <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
            <!-- Replace com.domain.appid with your application ID -->
            <uses-permission android:name="com.mycompanyname.myprojectname.permission.MAPS_RECEIVE"/>
            <permission android:name="com.mycompanyname.myprojectname.permission.MAPS_RECEIVE"
                android:protectionLevel="signature"/>
            <application>
                <!-- Replace "PASTE YOUR GOOGLE MAPS API KEY HERE" with the Google API key you obtained -->
                <meta-data android:name="com.google.android.maps.v2.API_KEY"
                    android:value="My App key"/>
            </application>
        </manifest>
    </android>

4) 更改Titamium sdk 版本。

<sdk-version>3.0.2.GA</sdk-version>

5) 从钛文档中复制以下代码并放入 app.js 文件

var MapModule = require('ti.map');
var win = Titanium.UI.createWindow();

var mountainView = MapModule.createAnnotation({
    latitude:37.390749,
    longitude:-122.081651,
    title:"Appcelerator Headquarters",
    subtitle:'Mountain View, CA',
    pincolor:MapModule.ANNOTATION_RED,
    myid:1 // Custom property to uniquely identify this annotation.
});

var mapview = MapModule.createView({
    mapType: MapModule.NORMAL_TYPE,
    region: {latitude:33.74511, longitude:-84.38993,
            latitudeDelta:0.01, longitudeDelta:0.01},
    animate:true,
    regionFit:true,
    userLocation:true,
    annotations:[mountainView]
});

win.add(mapview);
// Handle click events on any annotations on this map.
mapview.addEventListener('click', function(evt) {
    Ti.API.info("Annotation " + evt.title + " clicked, id: " + evt.annotation.myid);
});
win.open();

6) 我创建了新的密钥库文件并使用此密钥库文件创建分发版本。

7) 为了创建谷歌地图 API 密钥,我在控制台中复制了 SHA1 证书指纹;com.mycompanyname.myprojectname。

应用程序已成功安装在我的三星 S3 设备中。当我运行该应用程序时,它会显示带有 +,- 按钮的地图视图以进行缩放。唯一的问题是地图视图内没有地图。

4

3 回答 3

2

在移动设备上编译时检查您的 Studio 控制台,并查找:

[DEBUG] jarsigner -sigalg MD5withRSA -digestalg SHA1 -storepass ******* -keystore "YOUR_PATH_TO_KEYSTORE" -signedjar 

如果密钥库位于“.../mobilesdk/osx/3.0.2.GA/android/dev_keystore”中,您需要使用 dev_keystore 的 SHA1 证书创建一个谷歌地图 API 密钥。

这对我有用。

于 2013-03-27T15:37:04.313 回答
0

我注意到一个非常相似的问题。在我的应用程序中,我使用了一个视图管理器,它在屏幕外加载内容,然后通过设置 left 属性为屏幕上的视图设置动画。我可以让地图出现的唯一方法是,如果我还包括在动画调用中更改不透明度。我创建了一个小型 Alloy 应用程序来说明。

index.js

function doClick(e) {  
    $.mapView.animate({left:0, opacity:1})
}

var map1 = MapModule.createView({
    userLocation: true,
    mapType: MapModule.NORMAL_TYPE,
    animate: true,
    region: {latitude: -33.87365, longitude: 151.20689, latitudeDelta: 0.1, longitudeDelta: 0.1 },
    height: '100%',
    top: 0,
    left: 0,
    width: '100%'
});

$.mapView.add(map1);

$.win.open();

索引.xml

<Alloy>
    <Window class="container" id="win">
        <Label onClick="doClick" height="100">Click HERE</Label>
        <View id="mapView">

        </View>
    </Window>
</Alloy>

索引.tss

".container": {
    backgroundColor:"white"
},
"#mapView": {
    top:0,
    bottom:0,
    opacity:1,
    width:Ti.Platform.displayCaps.platformWidth,
    left:Ti.Platform.displayCaps.platformWidth
}

如果您从动画调用中删除不透明度,则地图将按照您的描述显示为空白。

function doClick(e) {  
    $.mapView.animate({left:0})
}

这是一个似乎对我有用的肮脏技巧,尽管我很想知道为什么更改动画调用中的不透明度(只需添加 $.mapView.opacity = 1; 不起作用)会使地图出现......

于 2013-03-26T18:25:39.727 回答
0

我的 Galaxy s3 也有同样的问题。对我来说,解决方案是我将地图模块移动到我的项目( modules/android/ti.map/2.1.2 )并且我的 AndroidManifest.xml 给我带来了麻烦,当我删除它时它工作得很好,我有同样的和你一样的问题。

希望这会有所帮助。此外,可以在这里看到一个非常好的视频,其中一个人实际上展示了完整的设置(非常感谢他!): http ://www.youtube.com/watch?v=M4fUlqKWg7g

于 2013-07-18T09:21:37.430 回答