问题
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