Moja aplikacja na Androida zastępuje aplikację Lyft?

13

Zbudowałem aplikację na Androida, która w jakiś sposób przejmuje lub zastępuje aplikację sterownika Lyft. Zasadniczo, ilekroć użytkownik pobierze moją aplikację na Androida, w jakiś sposób przejmuje jej aplikację Lyft. Nie otrzyma od Lyft żadnych próśb o jazdę (nawet w środku bardzo zajętego czasu). Następnie, gdy usuwa moją aplikację, działa ona znowu idealnie. Natychmiast znów jeździ. To najdziwniejsza rzecz, jaką kiedykolwiek widziałem. I to nie jest tylko przypadek, kiedy idzie zabijać swoje aplikacje, to dosłownie pokazuje moje logo aplikacji przejmującej aplikację sterownika Lyft.Zdjęcie w załączeniuZauważ, jak oryginalnie ma logo Lyft. Następnie, gdy moja aplikacja jest zainstalowana, ma moje logo aplikacji Lyft (moje logo jest tylko domyślnym logo Androida). Może nawet zabić moją aplikację, a jej aplikacja Lyft, a także aplikacja sterownika Uber nie działają! Jedynym sposobem, aby to naprawić, jest całkowite odinstalowanie mojej aplikacji i ponowne uruchomienie jej telefonu. Wtedy wszystko działa idealnie. Jednym ważnym elementem jest to, że cały czas śledzę lokalizację. Po prostu nie jestem pewien, od czego zacząć od tego błędu, więc wszelkie pomysły są pomocne. Dzięki! Użytkownik używa Galaxy Note 10+ z Androidem 10. Żaden z naszych innych użytkowników Androida nie powiedział nam o tym problemie. Wydaje się, że jest to wyjątkowa obudowa dla tego telefonu.

Oto wszystkie moje przejawy i zamiary:

    <?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>
Daniel Jones
źródło
3
Zacznij od włączenia do pytania swojego manifestu i wszystkich filtrów zamiarów.
Morrison Chang
Ok, dodałem manifest.
Daniel Jones
1) Jakie wersje Androida / urządzeń to ma miejsce 2) Czy robisz coś specjalnego programowo z Context.registerReceiver()lub PackageManager. Zobacz: Jak utworzyć / wyłączyć filtr zamiarów według programowalnego sposobu?
Morrison Chang
9
Twój klient może chcieć, abyś
wykroił
2
kilka sugestii: 1. Poproś ją o zainstalowanie aplikacji. Uruchom ponownie urządzenie, a następnie zacznij korzystać z Uber / Lyft bez otwierania aplikacji i sprawdź, czy to działa 2. Urządzenie może zawierać złośliwe oprogramowanie / wirusa. Poproś ją o przywrócenie ustawień fabrycznych, a następnie wykonaj zadanie.
Sahil Manchanda

Odpowiedzi:

2

Wydaje mi się, że Twój problem dotyczy określonego nameelementu w twoim Manifest.xml, konkretnie pod applicationtagiem.

Masz swoją zdefiniowaną jako .parse.parse:, co wydaje mi się dość dziwne. Patrząc na ten link z parsowanej platformy, myślę, że to właśnie deklarujesz jako nazwę swojej aplikacji.

Ten element nazwy, choć może wydawać się nieistotny, jest w rzeczywistości miejscem, w którym aplikacja generuje kontekst na poziomie aplikacji lub, w tym przypadku, w którym Intentswykrywane są elementy zewnętrzne .

Jest bardzo prawdopodobne, że system nie potrafi rozróżnić, który z nich pociągnąć, i dlatego przyciąga twój nad Lyft, kiedy może.

Aby rozwiązać ten problem, po prostu zadeklaruj własną klasę, która rozszerza ją Applicationgdzieś w twoim projekcie w następujący sposób:

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();
    }
}

Następnie zaktualizuj manifest, aby wyglądał tak:

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

I powinien działać poprawnie.

Jeśli nadal masz problemy, zaktualizuj swoje pytanie, dodając więcej informacji, a my możemy je zdiagnozować dalej.

PGMacDesign
źródło
Instancja aplikacji na Androida może i powinna być tworzona tylko przez system operacyjny Android. Co ma zrobić getinstance? Poza tym nigdy nie powinieneś statycznie odwoływać się do swojej aplikacji .. myli system Android, gdy chce usunąć nieużywane aplikacje z ich środowiska
uruchomieniowego
Ponadto, jeśli nazwa aplikacji zaczyna się od czegoś, wyszukuje pod nią klasę aplikacji, ${packageName}.somethingwięc to też nie powinno być przyczyną
TacB0sS
Oto kilka materiałów referencyjnych, jeśli jesteś ciekawy różnych celów tego podejścia. github.com/codepath/android_guides/wiki/…
PGMacDesign
Link nie opisuje twojego podejścia. Założę się, że moja kariera new MyApplication()nigdy się nie nazywa, chyba że uruchomisz niestandardowy ROM. Również nie tam, gdzie mają statyczne odniesienie do aplikacji
TacB0sS