【问题标题】:My Android App is Overriding The Lyft App?我的 Android 应用程序正在覆盖 Lyft 应用程序?
【发布时间】:2020-02-28 21:23:04
【问题描述】:

我构建了一个 Android 应用,它以某种方式接管或覆盖了 Lyft 司机应用。基本上,只要用户下载了我的 Android 应用程序,它就会以某种方式接管她的 Lyft 应用程序。她不会收到 Lyft 的任何乘车请求(即使是在非常繁忙的时段)。然后,当她删除我的应用程序时,它再次完美运行。她立即​​再次获得游乐设施。这是我见过的最奇怪的事情。这不仅仅是巧合,当她去杀掉她的应用程序时,它实际上显示了我的应用程序徽标接管了 Lyft 司机应用程序。 请注意它最初是如何带有 Lyft 徽标的。然后,当我的应用程序安装后,它会显示我的 Lyft 应用程序徽标(我的徽标只是默认的 Android 徽标)。她甚至可以杀死我的应用程序,而她的 Lyft 和 Uber 司机应用程序都无法运行!修复它的唯一方法是完全卸载我的应用程序并重新启动她的手机。然后,一切正常。一个重要的因素是我一直在跟踪位置。我只是不确定从哪里开始这个错误,所以任何想法都是有帮助的。谢谢!用户正在使用搭载 Android 10 的 Galaxy Note 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>

【问题讨论】:

  • 首先在问题中包含您的清单和所有意图过滤器。
  • 好的,我添加了清单。
  • 1) 这发生在什么版本的 Android / 设备上 2) 您是否以编程方式使用 Context.registerReceiver()PackageManager 做任何特别的事情。见:How to create/disable intent-filter by programmable way?
  • 您的客户可能希望您去掉他们的名字...
  • 一些建议: 1. 让她安装你的App。重新启动设备,然后在不打开您的应用程序的情况下开始使用 Uber/Lyft 并查看它是否有效 2. 设备可能存在某种恶意软件/病毒。让她恢复出厂设置,然后执行任务。

标签: android


【解决方案1】:

我相信您的问题与您在Manifest.xml 中定义的name 元素有关,特别是application 标记下的元素。

您的定义为:.parse.parse,这对我来说似乎很奇怪。 从解析平台查看this link,我认为这就是您要声明的应用程序名称。

这个名称元素虽然看起来并不重要,但实际上是您的应用程序从中生成应用程序级别上下文的地方,或者在这种情况下,是发现外部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 操作系统创建。那个 getinstance 假设在那里做什么?此外,您永远不应该静态地硬引用您的应用程序。当它想要从运行时清除未使用的应用程序时,它会混淆 android 系统
  • 另外,如果应用名称以 .something 开头,它会在 ${packageName}.something 下搜索应用类,所以这也不应该是原因
  • 如果您对这种方法的各种用途感到好奇,这里有一些参考资料。 github.com/codepath/android_guides/wiki/…
  • 该链接没有描述您的方法.. 我敢打赌我的职业生涯中永远不会调用new MyApplication(),除非您在一个混乱的自定义 rom 上运行。也没有他们持有对应用程序的静态引用的地方
猜你喜欢
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多