Мій додаток для Android перевищує додаток Lyft?


13

Я створив додаток для Android, яке якимось чином переймає або переосмислює драйвер програми Lyft. По суті, кожен раз, коли користувач завантажує мою програму Android, вона якось переймає її додаток Lyft. Вона не отримає жодних запитів на їзду від Ліфта (навіть у середині супернапруженого часу). Потім, коли вона видаляє мою програму, вона знову прекрасно працює. Вона відразу ж знову їздить. Це най дивніше, що я коли-небудь бачив. І це не просто випадково, коли вона збирається вбивати свої додатки, вона буквально показує логотип мого додатка, який переймає драйвер Lyft.Фото додаєтьсяЗверніть увагу, як оригінально він має логотип Lyft. Потім, коли мій додаток встановлено, він містить мій логотип для програми Lyft (мій логотип - це лише логотип Android за замовчуванням). Вона навіть може вбити мою програму, а її програма Lyft, а також програма драйвера Uber не працюють! Єдиний спосіб виправити це - повністю видалити мою програму та перезапустити її телефон. Тоді, все працює чудово. Одним з важливих елементів є те, що я постійно відстежую місцеположення. Я просто не впевнений, з чого навіть почати цю помилку, тому будь-які ідеї корисні. Дякую! Користувач використовує Galaxy Note 10+ з Android 10. Ніхто з інших наших користувачів Android не повідомив нам про цю проблему. Здається, це унікальний випадок для цього телефону.

Ось усі мої маніфести та наміри:

    <?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
Почніть з включення у запитання свого маніфесту та всіх фільтрів намірів.
Моррісон Чанг

Гаразд, я додав маніфест.
Даніель Джонс

1) У яких версіях Android / пристроїв це відбувається 2) Ви робите щось особливе програмно з Context.registerReceiver()або PackageManager. Див.: Як створити / відключити фільтр намірів програмованим способом?
Моррісон Чанг

9
Ваш клієнт може віддати перевагу, щоб ви
вирізали

2
кілька пропозицій: 1. Попросіть її встановити ваш додаток. Перезавантажте пристрій, а потім почніть використовувати Uber / Lyft, не відкриваючи додаток, і перегляньте, чи це працює. Попросіть її зробити скидання на завод, а потім виконати завдання.
Сахіл Манчанда

Відповіді:


2

Я вважаю, що ваша проблема пов’язана з вашим визначеним nameелементом у вашому Manifest.xml, зокрема, тому, що знаходиться під нимapplication тегом.

Ви визначили своє: як .parse.parseце мені здається дивним. Переглядаючи це посилання з платформи розбору, я думаю, що саме це ви заявляєте як ім’я свого додатка.

Цей елемент імені, хоча це може здатися неважливим, насправді там, де ваша програма генерує контекст рівня програми з, або в цьому випадку, де зовнішній Intents виявляються .

Дуже ймовірно, що система не може розрізнити, яку саме тягнути, і тому тягне вашу над Lyft, коли зможе.

Щоб вирішити це, просто оголосіть власний клас, який розширює Applicationклас десь у вашому проекті так:

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

Тоді просто оновіть свій Маніфест, щоб виглядати так:

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

І воно повинно функціонувати належним чином.

Якщо у вас все ще виникають проблеми, оновіть своє запитання додатковою інформацією, і ми зможемо діагностувати його далі.


Екземпляр програми для android може бути і повинен бути створений лише Android os .. Що це, за припущення, що там робити? Крім того, ви ніколи не повинні статично важко посилатися на свою програму .. вона плутає систему Android, коли вона хоче очистити невикористані програми від їх виконання
TacB0sS

Крім того, якщо назва програми починається з. Чогось, він шукає клас додатка під ${packageName}.somethingтаким, що теж не повинно бути причиною
TacB0sS

Ось декілька довідкових матеріалів, якщо вам цікаво різних цілей цього підходу. github.com/codepath/android_guides/wiki/…
PGMacDesign

Посилання не описує ваш підхід. Я буду робити ставку на свою кар'єру, що new MyApplication()ніколи не називаються, якщо ви не працюєте на заплутаному користувальницькому ромі. Також там, де вони містять статичну посилання на додаток
TacB0sS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.