PoRE: laboratorio 2

Escribe la serie APK sin enseñar nada sobre ingeniería inversa (ー ー ゛) ¡
Muchas gracias por tus tutoriales en Internet! !
¡Realmente depende de ti! ! ! ! (• ̥́ ˍ • ̀ू)
Ahora debemos hacer el curso de desarrollo de Android ~


Eche un vistazo a los puntos de inspección de Lab2 (realmente · nunca estudiado)

Inserte la descripción de la imagen aquí


Tarea 1

Muy real atascado en Task1

1. Implemente el receptor, comience automáticamente después de arrancar y llame automáticamente al servicio

Idea : escriba un receptor, regístrese en el manifiesto para recibir la transmisión de inicio. Después de
recibir la transmisión, use una intención para iniciar un servicio

Manifiesto:

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 <receiver android:name=".SecretBootReceiver"
                android:enabled="true"
                android:exported="true">
                <intent-filter android:priority="1000">
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </receiver>

receptor:

public class SecretBootReceiver extends BroadcastReceiver {
    
    
    static final String ACTION = "android.intent.action.BOOT_COMPLETED";
    @Override
    public void onReceive(Context context, Intent intent) {
    
    
        if (intent.getAction().equals(ACTION)){
    
    
            Intent service= new Intent(context,SecretService.class);
            service.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            Log.e("TAG","receiver");
            context.startService(service);
    }
}}

Referencia : (Es el más amigable para Xiaobai que puedo encontrar ...) Arrancar y
ejecutar
https://www.cnblogs.com/Chenshuai7/p/5434868.html
Servicio de inicio
https://www.cnblogs.com/ guanxinjing / p / 9861476.html

2. Obtenga el posicionamiento GPS en servicio, brinde automáticamente cada tres segundos

La sensación de escribir completamente ciego ...

Idea : registre los permisos requeridos en el manifiesto, use LocationManager para realizar el posicionamiento, use requestLocationUpdates para volver a adquirir cada tres segundos y use toast para generar el
manifiesto:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
public class SecretService extends Service {
    
    
    private LocationManager locationManager;

    public void endService()
    {
    
    
        if(locationManager != null && locationListener != null)
        {
    
    
            locationManager.removeUpdates(locationListener);
        }
    }
    @Override
    public IBinder onBind(Intent intent) {
    
    
        return null;
    }


    @SuppressLint("MissingPermission")
    @Override
    public void onCreate() {
    
    
        super.onCreate();
        Log.e("TAG", "service");
        final LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener locationListener = new LocationListener() {
    
    
            public void onLocationChanged(Location location) {
    
    
                if (location != null) {
    
    
                    String latitude = Double.toString(location.getLatitude());//经度
                    String longitude = Double.toString(location.getLongitude());//纬度
                    String accuracy = Double.toString(location.getAccuracy());
                    Log.i("log", "Location changed : Lat: " + latitude + " Lng: " + longitude);
                    Toast.makeText(SecretService.this, "getAccuracy:" + accuracy + "\ngetLatitude:" + latitude + "\ngetLongitude:" + longitude, Toast.LENGTH_SHORT).show();
                } else {
    
    
                    Log.i("log", "Location changed : Lat: " + "NULL" + " Lng: " + "NULL");
                }

            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
    
    
            }

            @Override
            public void onProviderEnabled(String provider) {
    
    
            }

            @Override
            public void onProviderDisabled(String provider) {
    
    
            }
        };

        //实现每三秒重新获取
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, locationListener);

    }


    @Override
    public void onDestroy()
    {
    
    
        endService();
    }


    private final LocationListener locationListener = new LocationListener() {
    
    
        public void onLocationChanged(Location location) {
    
    
            if (location != null) {
    
    
                String latitude = Double.toString(location.getLatitude());
                String longitude = Double.toString(location.getLongitude());
                }
            }


        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
    
    

        }

        @Override
        public void onProviderEnabled(String provider) {
    
    

        }

        @Override
        public void onProviderDisabled(String provider) {
    
    

        }
    };

};

3. Obtenga acceso dinámico a los permisos al iniciar la aplicación por primera vez
private String[] permissions ={
    
    Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET};
 for (int i = 1; i < permissions.length; i++) {
    
    
            if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
    
    
                ActivityCompat.requestPermissions(this, permissions, i);
            } else {
    
    
                Intent intent = new Intent(MainActivity.this, MainActivity.class);
                startService(intent);
            }

Referencia:
https://blog.csdn.net/shen4402/article/details/78311124
Obtenga permiso
https://blog.csdn.net/ww897532167/article/details/70162678/
Efecto:
Inserte la descripción de la imagen aquí

Tarea 2

El problema de los subprocesos para modificar la interfaz de usuario es el
mismo que la escritura a ciegas en emm

new Thread(new Runnable() {
    
    
                        @Override
                        public void run() {
    
    
                            Looper.prepare();
                            Handler handler = new Handler(Looper.getMainLooper()) {
    
    
                                @Override
                                public void handleMessage(Message msg) {
    
    
                                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                                    builder.setMessage(input);
                                    builder.show();
                                }
                            };
                            handler.sendEmptyMessage(1);
                            Looper.loop();
                            tv.setText(input);
                            // Make a dialog rather than edit the text in main UI
                        }

                    }).start();

Referencia:
ventana emergente
https://www.cnblogs.com/javadongx/p/android_alert_message.html
interfaz de usuario de actualización de subproceso
https://blog.csdn.net/CVSDN/article/details/84879725
Efecto:
Inserte la descripción de la imagen aquí

Task3

Examine principalmente el mecanismo de reflexión de Java, los tutoriales escritos por los grandes son fáciles de entender

PoRELab.publicMethod(input);
                    PoRELab obj1 = new PoRELab();
                    try {
    
    
                        Class<?> clazz = obj1.getClass();
                        System.out.println(clazz);
                        PoRELab obj2 = (PoRELab) clazz.newInstance();
                        Field field = clazz.getDeclaredField("curStr");
                        field.setAccessible(true);
                        String got = (String) (field).get(obj2);
                        Method method = clazz.getDeclaredMethod("privateMethod", String.class, String.class);
                        method.setAccessible(true);
                        method.invoke(obj2, "get private method", got);
                    } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException | InstantiationException e) {
    
    
                        e.printStackTrace();
                    }

efecto:
Inserte la descripción de la imagen aquí


Pensé que iba a terminar Lab2 en la calle ... ¿cómo se verá el laboratorio en la parte de atrás (• ̥́ ˍ • ̀ू) de
todos modos! ¡Inventa una lección sobre el desarrollo de Android! ! ! ! ¡Párate B y vete!

Supongo que te gusta

Origin blog.csdn.net/Rachel_IS/article/details/105017437
Recomendado
Clasificación