android source百度地图api surfaceChanged(Unknown Source)

百度android的SDK,经常出现OutOfMemoryError,有没有解决办法啊_百度地图api吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:3,794贴子:
百度android的SDK,经常出现OutOfMemoryError,有没有解决办法啊收藏
如果多次使用百度地图,就会出现OutOfMemoryError,有没有解决办法,如何控制内存使用?出错信息07-07 01:07:43.206: ERROR/AndroidRuntime(603): Uncaught handler: thread main exiting due to uncaught exception07-07 01:07:43.217: ERROR/AndroidRuntime(603): java.lang.OutOfMemoryError07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at com.baidu.mapapi.a.a(Unknown Source)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at com.baidu.mapapi.a.onLayout(Unknown Source)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at android.view.View.layout(View.java: 01:07:43.217: ERROR/AndroidRuntime(603):
at com.baidu.mapapi.MapView.onLayout(Unknown Source)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at android.view.View.layout(View.java: 01:07:43.217: ERROR/AndroidRuntime(603):
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:900)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at android.view.View.layout(View.java: 01:07:43.217: ERROR/AndroidRuntime(603):
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at android.view.View.layout(View.java: 01:07:43.217: ERROR/AndroidRuntime(603):
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at android.view.View.layout(View.java: 01:07:43.217: ERROR/AndroidRuntime(603):
at android.view.ViewRoot.performTraversals(ViewRoot.java:996)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at android.view.ViewRoot.handleMessage(ViewRoot.java: 01:07:43.217: ERROR/AndroidRuntime(603):
at android.os.Handler.dispatchMessage(Handler.java:99)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at android.os.Looper.loop(Looper.java:123)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at android.app.ActivityThread.main(ActivityThread.java: 01:07:43.217: ERROR/AndroidRuntime(603):
at java.lang.reflect.Method.invokeNative(Native Method)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at java.lang.reflect.Method.invoke(Method.java:521)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)07-07 01:07:43.217: ERROR/AndroidRuntime(603):
at dalvik.system.NativeStart.main(Native Method)
Log截取的很不专业啊。说说你的调用方方式。
我也遇到这个问题,很头疼啊!不知道这是百度map的bug还是自己的调用方式有问题?我就是在与MapActivity对应的布局文件里使用 &com.baidu.mapapi.MapView/&
对于这个问题,我已得到百度技术人员的帮助。导致这个问题的原因主要是 register了监听器(BroadcastReceiver)却没有unregister,定位时没有调用与enable相关的disable,或与requestUpdate相对应的removeUpdate.
我也老是这样
register了监听器(BroadcastReceiver)却没有unregister
这个如何unregister 另外enable相关的disable,或与requestUpdate相对应的removeUpdate写在onResume()和onPause()中就可以吧
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或摘要 在Android中,我们有三种方式来实现视频的播放: 1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。 2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。 3、使用MediaPlayer类和SurfaceVi
在Android中,我们有三种方式来实现视频的播放:1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。1、调用其自带的播放器:Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");
//调用系统自带的播放器
Intent intent = new Intent(Intent.ACTION_VIEW);
Log.v("URI:::::::::", uri.toString());
intent.setDataAndType(uri, "video/mp4");
startActivity(intent);2、使用VideoView来实现:Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");
VideoView videoView = (VideoView)this.findViewById(R.id.video_view);
videoView.setMediaController(new MediaController(this));
videoView.setVideoURI(uri);
videoView.start();
videoView.requestFocus();3、使用MediaPlayer:package demo.
import java.io.IOE
import android.app.A
import android.media.MediaP
import android.media.MediaPlayer.OnCompletionL
import android.media.MediaPlayer.OnErrorL
import android.media.MediaPlayer.OnInfoL
import android.media.MediaPlayer.OnPreparedL
import android.media.MediaPlayer.OnSeekCompleteL
import android.media.MediaPlayer.OnVideoSizeChangedL
import android.os.B
import android.os.E
import android.util.L
import android.view.D
import android.view.SurfaceH
import android.view.SurfaceV
import android.widget.LinearL
* 该实例中使用MediaPlayer完成播放,同时界面使用SurfaceView来实现
* 这里我们实现MediaPlayer中很多状态变化时的监听器
* 使用Mediaplayer时,也可以使用MediaController类,但是需要实现MediaController.mediaController接口
* 实现一些控制方法。
* 然后,设置controller.setMediaPlayer(),setAnchorView(),setEnabled(),show()就可以了,这里不再实现
* @author Administrator
public class VideoSurfaceDemo extends Activity implements OnCompletionListener,OnErrorListener,OnInfoListener,
OnPreparedListener, OnSeekCompleteListener,OnVideoSizeChangedListener,SurfaceHolder.Callback{
private Display currD
private SurfaceView surfaceV
private SurfaceH
private MediaP
private int vWidth,vH
//private boolean readyToPlay =
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.setContentView(R.layout.video_surface);
surfaceView = (SurfaceView)this.findViewById(R.id.video_surface);
//给SurfaceView添加CallBack监听
holder = surfaceView.getHolder();
holder.addCallback(this);
//为了可以播放视频或者使用Camera预览,我们需要指定其Buffer类型
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//下面开始实例化MediaPlayer对象
player = new MediaPlayer();
player.setOnCompletionListener(this);
player.setOnErrorListener(this);
player.setOnInfoListener(this);
player.setOnPreparedListener(this);
player.setOnSeekCompleteListener(this);
player.setOnVideoSizeChangedListener(this);
Log.v("Begin:::", "surfaceDestroyed called");
//然后指定需要播放文件的路径,初始化MediaPlayer
String dataPath = Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v";
player.setDataSource(dataPath);
Log.v("Next:::", "surfaceDestroyed called");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
//然后,我们取得当前Display对象
currDisplay = this.getWindowManager().getDefaultDisplay();
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// 当Surface尺寸等参数改变时触发
Log.v("Surface Change:::", "surfaceChanged called");
public void surfaceCreated(SurfaceHolder holder) {
// 当SurfaceView中的Surface被创建的时候被调用
//在这里我们指定MediaPlayer在当前的Surface中进行播放
player.setDisplay(holder);
//在指定了MediaPlayer播放的容器后,我们就可以使用prepare或者prepareAsync来准备播放了
player.prepareAsync();
public void surfaceDestroyed(SurfaceHolder holder) {
Log.v("Surface Destory:::", "surfaceDestroyed called");
public void onVideoSizeChanged(MediaPlayer arg0, int arg1, int arg2) {
// 当video大小改变时触发
//这个方法在设置player的source后至少触发一次
Log.v("Video Size Change", "onVideoSizeChanged called");
public void onSeekComplete(MediaPlayer arg0) {
// seek操作完成时触发
Log.v("Seek Completion", "onSeekComplete called");
public void onPrepared(MediaPlayer player) {
// 当prepare完成后,该方法触发,在这里我们播放视频
//首先取得video的宽和高
vWidth = player.getVideoWidth();
vHeight = player.getVideoHeight();
if(vWidth & currDisplay.getWidth() || vHeight & currDisplay.getHeight()){
//如果video的宽或者高超出了当前屏幕的大小,则要进行缩放
float wRatio = (float)vWidth/(float)currDisplay.getWidth();
float hRatio = (float)vHeight/(float)currDisplay.getHeight();
//选择大的一个进行缩放
float ratio = Math.max(wRatio, hRatio);
vWidth = (int)Math.ceil((float)vWidth/ratio);
vHeight = (int)Math.ceil((float)vHeight/ratio);
//设置surfaceView的布局参数
surfaceView.setLayoutParams(new LinearLayout.LayoutParams(vWidth, vHeight));
//然后开始播放视频
player.start();
public boolean onInfo(MediaPlayer player, int whatInfo, int extra) {
// 当一些特定信息出现或者警告时触发
switch(whatInfo){
case MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING:
case MediaPlayer.MEDIA_INFO_METADATA_UPDATE:
case MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING:
case MediaPlayer.MEDIA_INFO_NOT_SEEKABLE:
public boolean onError(MediaPlayer player, int whatError, int extra) {
Log.v("Play Error:::", "onError called");
switch (whatError) {
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Log.v("Play Error:::", "MEDIA_ERROR_SERVER_DIED");
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
Log.v("Play Error:::", "MEDIA_ERROR_UNKNOWN");
public void onCompletion(MediaPlayer player) {
// 当MediaPlayer播放完成后触发
Log.v("Play Over:::", "onComletion called");
this.finish();
上一篇: Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0。今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章。 大部分2D使用的api都在android.graphics和android.graphics.drawable包中。他们提供了图
下一篇: SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件。因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作的一件事,那么在Android开发中,我们如何能获取SD卡的内存容量呢? 首先,要37057人阅读
&&&&& 本篇通过一个简单的示例一步步介绍如何在Android应用中使用百度地图api。1)下载百度地图移动版API(Android)开发包&&&&& 要在Android应用中使用百度地图API,就需要在工程中引用百度地图API开发包,这个开发包包含两个文件:baidumapapi.jar和libBMapApiEngine.so。下载地址:
2)申请API Key&&&&& 和使用Google map api一样,在使用百度地图API之前也需要获取相应的API Key。百度地图API Key与你的百度账户相关联,因此您必须先有百度帐户,才能获得API Key;并且,该Key与您引用API的程序名称有关。&&&&& 百度API Key的申请要比Google的简单多了,其实只要你有百度帐号,应该不超过30秒就能完成API Key的申请。申请地址:
3)创建一个Android工程&&&&& 这里需要强调一点:百度地图移动版api支持Android 1.5及以上系统,因此我们创建的工程应基于Android SDK 1.5及以上。&&&&& 工程创建完成后,将baidumapapi.jar和libBMapApiEngine.so分别拷贝到工程的根目录及libs/armeabi目录下,并在工程属性-&Java Build Path-&Libraries中选择&Add JARs&,选定baidumapapi.jar,这样就可以在应用中使用百度地图API了。工程完整的目录结构如下图所示:&&&&&
4)在布局文件中添加地图控件(res/layout/main.xml)&&&&&&&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
&com.baidu.mapapi.MapView android:id="@+id/map_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
&/LinearLayout&&&
5)创建Activity继承com.baidu.mapapi.MapActivity&&&&& package com.liufeng.
import android.graphics.drawable.D
import android.os.B
import com.baidu.mapapi.BMapM
import com.baidu.mapapi.GeoP
import com.baidu.mapapi.MapA
import com.baidu.mapapi.MapC
import com.baidu.mapapi.MapV
public class MainActivity extends MapActivity {
private BMapManager mapM
private MapView mapV
private MapController mapC
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A50ADA7F03C777C4", null);
super.initMapActivity(mapManager);
mapView = (MapView) findViewById(R.id.map_View);
// 设置地图模式为交通地图
mapView.setTraffic(true);
// 设置启用内置的缩放控件
mapView.setBuiltInZoomControls(true);
// 用给定的经纬度构造一个GeoPoint(纬度,经度)
GeoPoint point = new GeoPoint((int) (47.118440 * 1E6), (int) (87.493147 * 1E6));
// 创建标记maker
Drawable marker = this.getResources().getDrawable(R.drawable.iconmarka);
// 为maker定义位置和边界
marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
// 取得地图控制器对象,用于控制MapView
mapController = mapView.getController();
// 设置地图的中心
mapController.setCenter(point);
// 设置地图默认的缩放级别
mapController.setZoom(12);
protected boolean isRouteDisplayed() {
protected void onDestroy() {
if (mapManager != null) {
mapManager.destroy();
mapManager =
super.onDestroy();
protected void onPause() {
if (mapManager != null) {
mapManager.stop();
super.onPause();
protected void onResume() {
if (mapManager != null) {
mapManager.start();
super.onResume();
6)在AndroidManifest.xml中配置&&&&& &?xml version="1.0" encoding="utf-8"?&
&manifest xmlns:android="/apk/res/android"
package="com.liufeng.baidumap"
android:versionCode="1"
android:versionName="1.0"&
&application android:icon="@drawable/icon" android:label="@string/app_name"&
&activity android:name=".MainActivity" android:label="@string/app_name"&
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
&/application&
&uses-sdk android:minSdkVersion="4" /&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&/manifest&
7)运行结果&&&&& 说明:上面的应用只是简单的展示了百度地图(交通地图),并将一个指定的点(根据经纬度确定)展示在手机屏幕的中心。当然,实际项目中涉及的map应用不会这么简单,百度地图API为我们提供了丰富的功能接口,有待我们一起去研究学习。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2207041次
积分:10310
积分:10310
排名:第460名
原创:54篇
评论:3526条
文章:22篇
阅读:1477665
(2)(1)(2)(4)(1)(4)(3)(1)(5)(2)(6)(1)(1)(1)(1)(1)(15)(4)}

我要回帖

更多关于 source.android.com 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信