Google Maps address validation with different links

亡梦爱人 提交于 2019-12-13 04:39:00

问题


In my app the admin can upload an adress from Google Maps and the user can open it by pressing a button (open). It is working perfectly on the emulator. The address from the Google Maps app in the emulator has this format : https://goo.gl/maps/7XN3foNbM2Ak9yNN9 , which works in both Activities.

Problem is, when i am using the phone (Samsung S6 Edge Plus running Android 7), Google Maps gives me the address in this format instead: https://maps.app.goo.gl/eGPJ3Q2E7dXRbzvD8 , which is not working with my address checker.

Why are the links different?

Note: Both links provided by Google Maps work if opened by a web browser.

Activity for addiding a new map destniation:

public class NewMapsDialog extends DialogFragment implements View.OnClickListener{

    private static final String TAG = "NewMapDialog";

    //widgets
    private EditText mTitle, mContent;
    private TextView mCreate, mCancel;

    //vars
    private IMapActivity mImapActivity;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        int style = DialogFragment.STYLE_NORMAL;
        int theme = android.R.style.Theme_DeviceDefault_Dialog;

        setStyle(style, theme);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate( R.layout.dialog_new_map, container, false);
        mTitle = view.findViewById(R.id.note_title);
        mContent = view.findViewById(R.id.note_content);
        mCreate = view.findViewById(R.id.create);
        mCancel = view.findViewById(R.id.cancel);

        mCancel.setOnClickListener(this);
        mCreate.setOnClickListener(this);

        getDialog().setTitle(" اضافة موقع");

        return view;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){

            case R.id.create:{

                // insert the new mape

                String title = mTitle.getText().toString();
                String content = mContent.getText().toString();
                final Uri intenturl = Uri.parse( mContent.getText().toString());
                Intent intent =new Intent( Intent.ACTION_VIEW , intenturl);
                intent.setPackage("com.google.android.apps.maps");
                if(!title.equals("")) {
                   if (intent.resolveActivity( getActivity().getPackageManager() ) !=null && mTitle !=null){
                    mImapActivity.createNewMap(title, content);
                    getDialog().dismiss();

                   } else {
                       Toast.makeText(getActivity(), " تأكد من الموقع", Toast.LENGTH_SHORT).show();
                   }
                } else {
                    Toast.makeText(getActivity(), "  ادخل اسم الموقع لطفاً", Toast.LENGTH_SHORT).show();
                }
                break;
            }
            case R.id.cancel:{
                getDialog().dismiss();
                break;
            }
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mImapActivity = (IMapActivity) getActivity();
    }
}

Activity to view address in Google Maps:

public class ViewMapsDialog extends DialogFragment implements View.OnClickListener {
    private static final String TAG = "ViewMapDialog";

    //widgets
    private EditText mTitle, mContent;
    private TextView mSave, mDelete,moOpen;

    //vars
    private IMapActivity iMapActivity;
    private Map mMap;

    public static ViewMapsDialog newInstance(Map map) {
        ViewMapsDialog dialog = new ViewMapsDialog();

        Bundle args = new Bundle();
        args.putParcelable("map", map);
        dialog.setArguments(args);

        return dialog;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        int style = DialogFragment.STYLE_NORMAL;
        int theme = android.R.style.Theme_DeviceDefault_Dialog;
        setStyle(style, theme);

        mMap = getArguments().getParcelable("map");
    }

    @Nullable
    @Override
    public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate( R.layout.dialog_view_map, container, false);
        mTitle = view.findViewById(R.id.note_title);
        mContent = view.findViewById(R.id.note_content);
        mSave = view.findViewById(R.id.save);
        moOpen = view.findViewById( R.id.open );
        mDelete = view.findViewById(R.id.delete);

        mSave.setOnClickListener(this);
        mDelete.setOnClickListener(this);
        final String url = mContent.getText().toString();

        moOpen.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Uri intenturl = Uri.parse( mContent.getText().toString());
                Intent intent =new Intent( Intent.ACTION_VIEW , intenturl);
                intent.setPackage("com.google.android.apps.maps");
                if (intent.resolveActivity( getActivity().getPackageManager() ) !=null){

                startActivity(intent);
            } else {
                    Toast.makeText(getActivity(), " تأكد من الموقع", Toast.LENGTH_SHORT).show();
                }
            }
        });
        getDialog().setTitle("تعديل الموقع ");
        setInitialProperties();
        return view;
    }

    private void setInitialProperties(){
        mTitle.setText(mMap.getTitle());
        mContent.setText(mMap.getContent());
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.save: {
                final Uri intenturl = Uri.parse( mContent.getText().toString());
                Intent intent =new Intent( Intent.ACTION_VIEW , intenturl);
                intent.setPackage("com.google.android.apps.maps");
                String title = mTitle.getText().toString();
                String content = mContent.getText().toString();
                if(!title.equals("")) {
                    if(intent.resolveActivity( getActivity().getPackageManager() ) !=null){
                        mMap.setTitle(title);
                        mMap.setContent(content);
                        iMapActivity.updateMap(mMap);
                        getDialog().dismiss();

                    } else {
                        Toast.makeText(getActivity(), " تأكد من الموقع", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(getActivity(), "  ادخل اسم الموقع لطفاً", Toast.LENGTH_SHORT).show();
                }
                break;
            }
            case R.id.delete: {
                iMapActivity.deleteMap(mMap);
                getDialog().dismiss();
                break;
            }
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        iMapActivity = (IMapActivity) getActivity();
    }
}

来源:https://stackoverflow.com/questions/57234146/google-maps-address-validation-with-different-links

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!