Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 谷歌地图:我可以通过onNewIntent接收碎片活动中的数据吗_Android_Google Maps_Android Fragments_Android Intent - Fatal编程技术网

Android 谷歌地图:我可以通过onNewIntent接收碎片活动中的数据吗

Android 谷歌地图:我可以通过onNewIntent接收碎片活动中的数据吗,android,google-maps,android-fragments,android-intent,Android,Google Maps,Android Fragments,Android Intent,我试图将serializable arrayList作为意图传递给MapFragmentActivity,但我面临的问题是,在10-20秒后调用了onNewIntent方法,这会延迟传递数据的位置。在FragmentActivity中,我可以使用onNewIntent接收数据吗?为什么传递意图时需要时间调用它 我以前用onCreate()方法创建了一个包含数据的列表,google地图加载速度很快 谢谢你的帮助 我的服务中的代码: Intent intent

我试图将serializable arrayList作为意图传递给Map
FragmentActivity
,但我面临的问题是,在10-20秒后调用了
onNewIntent
方法,这会延迟传递数据的位置。在
FragmentActivity
中,我可以使用
onNewIntent
接收数据吗?为什么传递意图时需要时间调用它

我以前用
onCreate()
方法创建了一个包含数据的列表,google地图加载速度很快

谢谢你的帮助

我的服务中的代码:

                    Intent intent1 = new Intent(this, Map.class);
                    intent1.putExtra("list_data", data);
                    intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                            | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    startActivity(intent1);
public class Map extends FragmentActivity implements OnMapReadyCallback {
    GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (servicesOK()) {

            setContentView(R.layout.map);

        } else {
            setContentView(R.layout.map_main);

        }

    }

    public boolean servicesOK() {
        int isAvailable = GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(this);
        if (isAvailable == ConnectionResult.SUCCESS) {
            return true;
        } else if (GooglePlayServicesUtil.isUserRecoverableError(isAvailable)) {
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(isAvailable,
                    this, 9001);
            dialog.show();

        } else {
            Toast.makeText(this, "Cant't connect to Google Play services",
                    Toast.LENGTH_SHORT).show();
        }
        return false;

    }

    private boolean initMap() {
        if (map == null) {
            SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            map = mapFrag.getMap();
        }
        return (map != null);
    }

    private void gotoLocation(double lat, double lng, String route_direct) {

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        final float zoom = 11;
        LatLng ll = new LatLng(lat, lng);
        if (lat != 0 && lng != 0 && !route_direct.isEmpty()) {
            MarkerOptions markerOpt = new MarkerOptions().title(route_direct)
                    .position(ll).visible(true);

            Marker marker = map.addMarker(markerOpt);
            marker.showInfoWindow();
            CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, zoom);
            map.moveCamera(update);
            Toast.makeText(this, "inside getoLocation()!", Toast.LENGTH_SHORT)
                    .show();

        }

    }

    @Override
    public void onMapReady(GoogleMap arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);

        @SuppressWarnings("unchecked")
        ArrayList<ItemDTO> list = (ArrayList<ItemDTO>) intent
                .getSerializableExtra("list_data");
        for (ItemDTO itemDTO : list) {
            double latitude = itemDTO.getLatitude();
            double longitude = itemDTO.getLongitude();
            int route1 = itemDTO.getRoute();
            String route = Integer.toString(route1);
            String direction = itemDTO.getDirection();
            String route_dirc = route + ", " + direction;

            if (initMap()) {
                Toast.makeText(this, "Ready to Map", Toast.LENGTH_SHORT).show();
                gotoLocation(latitude, longitude, route_dirc);

            } else {
                Toast.makeText(this, "Map not avialable", Toast.LENGTH_SHORT)
                        .show();
            }

        }
        Toast.makeText(this, "onNewIntent end!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
    }
地图活动:

                    Intent intent1 = new Intent(this, Map.class);
                    intent1.putExtra("list_data", data);
                    intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                            | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    startActivity(intent1);
public class Map extends FragmentActivity implements OnMapReadyCallback {
    GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (servicesOK()) {

            setContentView(R.layout.map);

        } else {
            setContentView(R.layout.map_main);

        }

    }

    public boolean servicesOK() {
        int isAvailable = GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(this);
        if (isAvailable == ConnectionResult.SUCCESS) {
            return true;
        } else if (GooglePlayServicesUtil.isUserRecoverableError(isAvailable)) {
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(isAvailable,
                    this, 9001);
            dialog.show();

        } else {
            Toast.makeText(this, "Cant't connect to Google Play services",
                    Toast.LENGTH_SHORT).show();
        }
        return false;

    }

    private boolean initMap() {
        if (map == null) {
            SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            map = mapFrag.getMap();
        }
        return (map != null);
    }

    private void gotoLocation(double lat, double lng, String route_direct) {

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        final float zoom = 11;
        LatLng ll = new LatLng(lat, lng);
        if (lat != 0 && lng != 0 && !route_direct.isEmpty()) {
            MarkerOptions markerOpt = new MarkerOptions().title(route_direct)
                    .position(ll).visible(true);

            Marker marker = map.addMarker(markerOpt);
            marker.showInfoWindow();
            CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, zoom);
            map.moveCamera(update);
            Toast.makeText(this, "inside getoLocation()!", Toast.LENGTH_SHORT)
                    .show();

        }

    }

    @Override
    public void onMapReady(GoogleMap arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);

        @SuppressWarnings("unchecked")
        ArrayList<ItemDTO> list = (ArrayList<ItemDTO>) intent
                .getSerializableExtra("list_data");
        for (ItemDTO itemDTO : list) {
            double latitude = itemDTO.getLatitude();
            double longitude = itemDTO.getLongitude();
            int route1 = itemDTO.getRoute();
            String route = Integer.toString(route1);
            String direction = itemDTO.getDirection();
            String route_dirc = route + ", " + direction;

            if (initMap()) {
                Toast.makeText(this, "Ready to Map", Toast.LENGTH_SHORT).show();
                gotoLocation(latitude, longitude, route_dirc);

            } else {
                Toast.makeText(this, "Map not avialable", Toast.LENGTH_SHORT)
                        .show();
            }

        }
        Toast.makeText(this, "onNewIntent end!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
    }
公共类映射扩展了FragmentActivity在MapreadyCallback上的实现{
谷歌地图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(servicesOK()){
setContentView(R.layout.map);
}否则{
setContentView(R.layout.map_main);
}
}
公共布尔服务sok(){
int isAvailable=GooglePlayServicesUtil
.isGooglePlayServicesAvailable(此);
if(isAvailable==ConnectionResult.SUCCESS){
返回true;
}else if(GooglePlayServicesUtil.isUserRecoverableError(isAvailable)){
Dialog Dialog=GooglePlayServicesUtil.getErrorDialog(可用,
这是(9001);
dialog.show();
}否则{
Toast.makeText(这是“无法连接到Google Play服务”,
吐司。长度(短)。show();
}
返回false;
}
私有布尔initMap(){
if(map==null){
SupportMapFragment MapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
map=mapFrag.getMap();
}
返回(map!=null);
}
专用空位定位(双lat、双lng、管柱直接路由){
SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
getMapAsync(这个);
最终浮点缩放=11;
LatLng ll=新LatLng(lat,lng);
如果(lat!=0&&lng!=0&&!route_direct.isEmpty()){
MarkerOptions markerOpt=新的MarkerOptions().标题(路线\直达)
.位置(ll).可见(真实);
Marker-Marker=map.addMarker(markerOpt);
marker.showInfoWindow();
CameraUpdate update=CameraUpdateFactory.newLatLngZoom(ll,缩放);
地图。移动摄像机(更新);
Toast.makeText(这是“inside getoLocation()!”,Toast.LENGTH\u SHORT)
.show();
}
}
@凌驾
mapready上的公共无效(谷歌地图arg0){
//TODO自动生成的方法存根
}
@凌驾
受保护的void onNewIntent(意图){
//TODO自动生成的方法存根
super.onNewIntent(意向);
@抑制警告(“未选中”)
ArrayList list=(ArrayList)intent
.getSerializableExtra(“列表数据”);
for(ItemDTO ItemDTO:list){
双纬度=itemDTO.getLatitude();
double longitude=itemDTO.getLongitude();
int route1=itemDTO.getRoute();
字符串route=Integer.toString(route1);
字符串方向=itemDTO.getDirection();
字符串route_dirc=route+“,”+方向;
if(initMap()){
Toast.makeText(这是“准备映射”,Toast.LENGTH_SHORT).show();
地理位置(纬度、经度、路线);
}否则{
Toast.makeText(此“地图不可导航”,Toast.LENGTH\u SHORT)
.show();
}
}
Toast.makeText(这是“onNewIntent end!”,Toast.LENGTH_SHORT.show();
}
@凌驾
public void onBackPressed(){
//TODO自动生成的方法存根
super.onBackPressed();
}

也许能回答您的问题question@so_jin_ee:我以前也读过,我正在用
FLAG\u ACTIVITY\u SINGLE\u TOP``和
onNewIntent`一起使用。问题出在哪里?