* The activity should implement * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback} * to handle permit or denial of this permission request */ public static class RationaleDialog extends DialogFragment { private static final String ARGUMENT_PERMISSION_REQUEST_CODE = "requestCode"; private static final String ARGUMENT_FINISH_ACTIVITY = "finish"; private boolean mFinishActivity = false; /** * Creates a new instance of a dialog displaying the rationale for the use of the location * permission *
* The permission is requested after clicking 'ok' * 75 * @param requestCode Id of the request that is used to request the permission It is * returned to the * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback} * @param finishActivity Whether the calling Activity should be finished if the dialog is * cancelled */ public static RationaleDialog newInstance(int requestCode, boolean finishActivity) { Bundle arguments = new Bundle(); arguments.putInt(ARGUMENT_PERMISSION_REQUEST_CODE, requestCode); arguments.putBoolean(ARGUMENT_FINISH_ACTIVITY, finishActivity); RationaleDialog dialog = new RationaleDialog(); dialog.setArguments(arguments); return dialog; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle arguments = getArguments(); final int requestCode = arguments.getInt(ARGUMENT_PERMISSION_REQUEST_CODE); mFinishActivity = arguments.getBoolean(ARGUMENT_FINISH_ACTIVITY); return new AlertDialog.Builder(getActivity()) setMessage(R.string.permission_rationale_location) setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // After click on Ok, request the permission 76 ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, requestCode); // Do not finish the Activity while requesting permission mFinishActivity = false; } }) setNegativeButton(android.R.string.cancel, null) create(); } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if (mFinishActivity) { Toast.makeText(getActivity(), R.string.permission_required_toast, Toast.LENGTH_SHORT) show(); getActivity().finish(); } } } } package com.vovi.checklocation.utils; /** * Created by Perpan on 9/23/2016 */ public class Utils { public static double distance(double lat1, double lat2, double lon1, double lon2, double el1, double el2) { 77 final int R = 6371; // Radius of the earth Double latDistance = Math.toRadians(lat2 - lat1); Double lonDistance = Math.toRadians(lon2 - lon1); Double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2); Double c = * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double distance = R * c * 1000; // convert to meters double height = el1 - el2; distance = Math.pow(distance, 2) + Math.pow(height, 2); return Math.sqrt(distance); } 78 79 generateDebugSources 80 81 82 83 84 85 86 87 ... cứu công nghệ GNSS, mơ hình ứng dụng cho thu phí điện tử ứng dụng cơng nghệ GNSS cho hệ thống thu phí giao thông điện tử Với đề tài ” Nghiên cứu cơng nghệ GNSS ứng dụng cho hệ thống thu phí giao. .. III: ỨNG DỤNG CÔNG NGHỆ GNSS TRONG THU PHÍ ĐIỆN TỬ GIAO THƠNG 49 3.1 Mơ hình phân tích ngun lý hoạt động hệ thống GNSS thu phí giao thơng điện tử 3.1.1 Mơ hình hệ thống GNSS thu phí giao. .. giao thông điện tử? ??, luận văn chia thành ba phần sau: Chương 1: Tổng quan công nghệ GNSS Chương 2: Các công nghệ hệ thống thu phí điện tử giao thơng Chương 3: Ứng dụng cơng nghệ GNSS thu phí điện