Un fragmento es una parte de una actividad que permite un diseño de actividad más modular. Un fragmento encapsula la funcionalidad para que sea más fácil de reutilizar en actividades y diseños. Los dispositivos Android existen en una variedad de tamaños de pantalla y densidades. Los fragmentos simplifican la reutilización de componentes en diferentes diseños y su lógica. Puede crear diseños de un solo panel para dispositivos (teléfonos) y diseños de varios paneles para tabletas. También puede usar fragmentos para admitir diferentes diseños para orientación horizontal y vertical en un teléfono inteligente. La siguiente imagen muestra cómo se pueden combinar dos módulos de interfaz de usuario definidos por fragmentos en una actividad para un diseño de tableta, pero separados para un diseño de teléfono.
En este artículo vamos a implementar una aplicación en la que podemos obtener las coordenadas de nuestra ubicación actual. Veremos que quién podemos obtener esa ubicación actual en Fragmento .
¿Qué vamos a construir en este artículo?
Aquí hay un video de muestra de lo que vamos a construir en este artículo. Tenga en cuenta que vamos a implementar este proyecto utilizando el lenguaje Java.
Implementación paso a paso
Paso 1. Crear un nuevo proyecto
- Abra un nuevo proyecto.
- Estaremos trabajando en Actividad vacía con lenguaje como Java. Deje todas las demás opciones sin cambios.
- Asigne un nombre a la aplicación a su conveniencia.
- Habrá dos archivos predeterminados llamados activity_main.xml y MainActivity.java.
Si no sabe cómo crear un nuevo proyecto en Android Studio, puede consultar ¿Cómo crear/iniciar un nuevo proyecto en Android Studio?
Paso 2. Agregar la dependencia requerida
Vaya a Gradle Scripts > gradle.scripts(módulo) y agréguele la siguiente dependencia
implementation 'com.google.android.gms:play-services-location:17.0.0'
Paso 3. Agregar los permisos requeridos
Navegue hasta el archivo AndroidManifest.xml y agréguele el siguiente fragmento de código:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Paso 4. Trabajando en archivos XML
Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml.
XML
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/frame_layout"/> </androidx.constraintlayout.widget.ConstraintLayout>
Navegue a la aplicación> haga clic con el botón derecho> nuevo> fragmento> fragmento en blanco y asígnele el nombre MainFragment. Use el siguiente código en el archivo fargment_main.xml:
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:gravity="center" android:padding="16dp" android:layout_height="match_parent" tools:context=".MainFragment"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bt_location" android:text="Get Location"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Latitude" android:textSize="32sp" android:textStyle="bold" android:textColor="@color/teal_200" android:layout_marginTop="16dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_latitude" android:text="0.0" android:textSize="24sp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Longitude" android:textSize="32sp" android:textStyle="bold" android:textColor="@color/teal_200" android:layout_marginTop="16dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_longitude" android:text="0.0" android:textSize="24sp"/> </LinearLayout>
Paso 5. Trabajando en archivos Java
Navegue hasta el archivo MainActivity.java y use el siguiente código en él. Se agregan comentarios al código para tener una mejor comprensión.
Java
package com.example.currentloactioninfragment; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initialize fragment Fragment fragment= new MainFragment(); // open fragment getSupportFragmentManager() .beginTransaction() .replace(R.id.frame_layout,fragment) .commit(); } }
Navegue hasta el archivo MainFragment.java y use el siguiente código en él. Se agregan comentarios al código para tener una mejor comprensión.
Java
package com.example.currentloactioninfragment; import android.Manifest; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.os.Looper; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.core.content.PackageManagerCompat; import androidx.fragment.app.Fragment; import com.google.android.gms.location.FusedLocationProviderClient; import com.google.android.gms.location.LocationCallback; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationResult; import com.google.android.gms.location.LocationServices; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; public class MainFragment extends Fragment { // Initialize variables Button btLocation; TextView tvLatitude, tvLongitude; FusedLocationProviderClient client; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Initialize view View view = inflater.inflate(R.layout.fragment_main, container, false); // Assign variable btLocation = view.findViewById(R.id.bt_location); tvLatitude = view.findViewById(R.id.tv_latitude); tvLongitude = view.findViewById(R.id.tv_longitude); // Initialize location client client = LocationServices .getFusedLocationProviderClient( getActivity()); btLocation.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { // check condition if (ContextCompat.checkSelfPermission( getActivity(), Manifest.permission .ACCESS_FINE_LOCATION) == PackageManager .PERMISSION_GRANTED && ContextCompat.checkSelfPermission( getActivity(), Manifest.permission .ACCESS_COARSE_LOCATION) == PackageManager .PERMISSION_GRANTED) { // When permission is granted // Call method getCurrentLocation(); } else { // When permission is not granted // Call method requestPermissions( new String[] { Manifest.permission .ACCESS_FINE_LOCATION, Manifest.permission .ACCESS_COARSE_LOCATION }, 100); } } }); // Return view return view; } @Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult( requestCode, permissions, grantResults); // Check condition if (requestCode == 100 && (grantResults.length > 0) && (grantResults[0] + grantResults[1] == PackageManager.PERMISSION_GRANTED)) { // When permission are granted // Call method getCurrentLocation(); } else { // When permission are denied // Display toast Toast .makeText(getActivity(), "Permission denied", Toast.LENGTH_SHORT) .show(); } } @SuppressLint("MissingPermission") private void getCurrentLocation() { // Initialize Location manager LocationManager locationManager = (LocationManager)getActivity() .getSystemService( Context.LOCATION_SERVICE); // Check condition if (locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled( LocationManager.NETWORK_PROVIDER)) { // When location service is enabled // Get last location client.getLastLocation().addOnCompleteListener( new OnCompleteListener<Location>() { @Override public void onComplete( @NonNull Task<Location> task) { // Initialize location Location location = task.getResult(); // Check condition if (location != null) { // When location result is not // null set latitude tvLatitude.setText( String.valueOf( location .getLatitude())); // set longitude tvLongitude.setText( String.valueOf( location .getLongitude())); } else { // When location result is null // initialize location request LocationRequest locationRequest = new LocationRequest() .setPriority( LocationRequest .PRIORITY_HIGH_ACCURACY) .setInterval(10000) .setFastestInterval( 1000) .setNumUpdates(1); // Initialize location call back LocationCallback locationCallback = new LocationCallback() { @Override public void onLocationResult( LocationResult locationResult) { // Initialize // location Location location1 = locationResult .getLastLocation(); // Set latitude tvLatitude.setText( String.valueOf( location1 .getLatitude())); // Set longitude tvLongitude.setText( String.valueOf( location1 .getLongitude())); } }; // Request location updates client.requestLocationUpdates( locationRequest, locationCallback, Looper.myLooper()); } } }); } else { // When location service is not enabled // open location setting startActivity( new Intent( Settings .ACTION_LOCATION_SOURCE_SETTINGS) .setFlags( Intent.FLAG_ACTIVITY_NEW_TASK)); } } }
Aquí está el resultado final de nuestra aplicación.
Producción:
Publicación traducida automáticamente
Artículo escrito por jangirkaran17 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA