La mia app per Android ha la precedenza sull'app Lyft?


13

Ho creato un'app per Android che sta in qualche modo sostituendo o annullando l'app del driver Lyft. Fondamentalmente, ogni volta che un utente ha scaricato la mia app Android, in qualche modo prende il controllo della sua app Lyft. Non riceverà alcuna richiesta di guida da Lyft (anche durante un periodo super impegnato). Quindi, quando cancella la mia app, funziona di nuovo perfettamente. Si riprende immediatamente a cavalcare. È la cosa più strana che abbia mai visto. E questo non è solo un caso, quando va a uccidere le sue app, mostra letteralmente il logo della mia app che prende il controllo dell'app del driver Lyft.Foto allegataNota come originariamente ha il logo Lyft. Quindi, quando la mia app è installata, ha il mio logo per l'app Lyft (il mio logo è solo il logo Android predefinito). Può persino uccidere la mia app e la sua Lyft e anche la sua app Uber non funzionano! L'unico modo per risolverlo è disinstallare completamente la mia app e riavviare il suo telefono. Quindi, tutto funziona perfettamente. Un elemento importante è che traccia sempre la posizione. Non sono proprio sicuro da dove cominciare con questo bug, quindi qualsiasi idea è utile. Grazie! L'utente utilizza un Galaxy Note 10+ con Android 10. Nessuno degli altri utenti Android ci ha segnalato questo problema. Sembra essere un caso unico per questo telefono.

Ecco tutti i miei manifest e intenti:

    <?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.danieljones.nomad_drivers">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>

    <application
        android:requestLegacyExternalStorage="true"
        android:name=".parse.Parse"
        android:allowBackup="true"
        android:fullBackupContent="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".checkIn.CheckInActivity"
            android:label="@string/title_activity_check_in"/>
        <activity android:name=".insurance.analysis_activity.ZendriveAnalysisActivity" />
        <activity android:name=".fare.breakdowns.FareBreakdownActivity" />
        <activity
            android:name=".navigation.HomeNavigationActivity"
            android:label="@string/title_activity_home_navigation"
            android:screenOrientation="portrait"/>
        <activity android:name=".welcome.LoginActivity" />
        <activity android:name=".welcome.special_code.CodeActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".new_rides.ride_detail.NewRideDetailActivity" />
        <activity android:name=".rides_lists.ride_detail.RideDetailActivity" />
        <activity android:name=".personal_rides.ride_detail.PersonalRideDetailActivity" />
        <activity android:name=".review_list.ReviewActivity"/>
        <activity android:name=".user_profile.driver_card.EditProfileActivity" />
        <activity android:name=".user_profile.edit_form.EditProfileFormActivity"/>
        <receiver android:name=".insurance.zendrive.MyZendriveBroadcastReceiver" />
        <activity android:name=".archived_rides.ride_detail.ArchivedRideDetailActivity" />
        <service
            android:name="com.parse.fcm.ParseFirebaseMessagingService"
            android:permission="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <receiver
            android:name=".push_notifications.ParseCustomBroadcastReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="com.parse.push.intent.RECEIVE" />
                <action android:name="com.parse.push.intent.DELETE" />
                <action android:name="com.parse.push.intent.OPEN" />
            </intent-filter>
        </receiver>
    </application>

3
Inizia includendo nella domanda il tuo manifest e tutti i filtri di intenti.
Morrison Chang,

Ok, ho aggiunto il manifest.
Daniel Jones,

1) Quali versioni di Android / dispositivi si verificano 2) Stai facendo qualcosa di speciale a livello di programmazione con Context.registerReceiver()o PackageManager. Vedi: Come creare / disabilitare il filtro intento in modo programmabile?
Morrison Chang,

9
Il tuo cliente potrebbe preferire che tu
ritagli il

2
alcuni suggerimenti: 1. Chiedile di installare la tua app. Riavvia il dispositivo e quindi inizia a utilizzare Uber / Lyft senza aprire l'app e verificane il corretto funzionamento 2. Il dispositivo potrebbe contenere un qualche tipo di malware / virus. Chiedile di eseguire un ripristino delle impostazioni di fabbrica e quindi eseguire l'attività.
Sahil Manchanda,

Risposte:


2

Credo che il tuo problema sia correlato al tuo nameelemento definito nel tuo Manifest.xml, in particolare, quello sotto il applicationtag.

Hai definito il tuo come .parse.parse:, che mi sembra piuttosto strano. Guardando questo link dalla piattaforma di analisi, penso che sia quello che stai dichiarando come il nome della tua app.

Questo elemento del nome, sebbene possa sembrare poco importante, in realtà è dove l'applicazione genera il contesto a livello di applicazione da o, in questo caso, da dove Intentsviene scoperto l'esterno .

È molto probabile che il sistema non sia in grado di distinguere quale tirare e quindi, quando è possibile, sta tirando il tuo su Lyft.

Per risolvere questo problema, dichiara semplicemente la tua classe che estende la Applicationclasse da qualche parte nel tuo progetto in questo modo:

public class MyApplication extends Application {

    private static MyApplication sInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
    }

    /**
     * Get an instance of the application. 
     *
     * @return {@link MyApplication}
     */
    public static synchronized MyApplication getInstance() {
        if (sInstance == null) {
            sInstance = new MyApplication();
        }
        return sInstance;
    }

    /**
     * Get context
     *
     * @return Context
     */
    public static synchronized Context getContext() {
        return getInstance().getApplicationContext();
    }
}

Quindi aggiorna il tuo Manifest in questo modo:

 <application
        .
        android:name=".MyApplication"
        .
        .
        .>
...

E dovrebbe funzionare correttamente.

Se i problemi persistono, aggiorna la tua domanda con ulteriori informazioni e possiamo diagnosticare ulteriormente.


L'istanza dell'app Android può e deve essere creata solo dal sistema operativo Android .. cosa dovrebbe fare questa getinstance? Inoltre non dovresti mai fare riferimento staticamente duro alla tua applicazione .. confonde il sistema Android quando vuole cancellare le app inutilizzate dal loro runtime
TacB0sS

Inoltre, se il nome dell'app inizia con un .shing qualcosa cerca la classe dell'app in ${packageName}.somethingmodo che anche questo non dovrebbe essere il motivo
TacB0sS

Ecco del materiale di riferimento se sei curioso di conoscere i vari scopi di questo approccio. github.com/codepath/android_guides/wiki/…
PGMacDesign

Il link non descrive il tuo approccio .. Scommetto che la mia carriera new MyApplication()non verrà mai chiamata, a meno che tu non corra su una rom personalizzata incasinata. Inoltre, dove non vi sono riferimenti statici all'applicazione
TacB0sS del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.