在新的应用程序版本中更改启动器活动名称

时间:2012-02-24 15:58:37

标签: android android-activity manifest launcher

我开发了一个新版本的应用程序,我已经更改了已启动的活动的名称。

在升级之前,清单中是:

    <activity
              android:name=".Splash"
              android:label="@string/app_name"
              android:screenOrientation="portrait"
              android:theme="@android:style/Theme.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

然后我只更改了活动的名称和包,现在是:

    <activity
              android:name=".view.SplashActivity"
              ... >
                    ...
    </activity>

当人们从市场上下载应用程序后,启动器不会刷新,它仍然会调用旧活动路径。

你知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:7)

参考Things That Cannot Change

它说,

  

构成兼容性中断的一个微妙但重要的方面是您的活动,服务和接收器组件的android:name属性。这可能是令人惊讶的,因为我们认为android:name指向实现我们的应用程序的私有代码,但它也(与清单包名称结合)该组件的官方唯一公共名称,由ComponentName类表示。

     

更改应用程序内部的组件名称可能会对您的用户产生负面影响。一些例子是:

     
      
  • 如果更改了应用程序主要活动的名称,则用户对其所做的任何快捷方式将不再有效。快捷方式是一个Intent,它直接指定它应该运行的ComponentName。
  •   
  • 如果实现动态壁纸的服务名称发生变化,那么启用动态壁纸的用户将在获取新版本的应用时将其壁纸恢复为系统默认设置。输入法,辅助功能服务,Honeycomb的新高级窗口小部件等也是如此。
  •   
  • 如果实施设备管理员的接收者名称发生变化,那么与动态壁纸示例一样,设备管理员将在应用程序更新时被禁用。这也适用于其他类型的接收器,例如App Widgets。
  •   

因此,如果可能,请不要更改清单中声明的​​组件的名称,或使用下面的代码删除指向该组件的任何图标。

ComponentName componentToDisable = new ComponentName("application.package.name", "packagename.ActivityClassName");
getPackageManager().setComponentEnabledSetting(componentToDisable, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

还可以使用<intent-filter>...</intent-filter>在清单中指定新的启动器活动,以便在用户点击启动器图标时启动您的新活动。

答案 1 :(得分:0)

如果您在手机上以调试模式启动活动,是否正确调用了活动。

如果是,请检查您是否执行了以下操作:

  • 您更改了整个包名称
  • 您根本没有签名或未正确签名

您也可以查看http://developer.android.com/guide/publishing/publishing_overview.html

反正。如果应用程序在您的调试手机上正确运行,则您的发布参数有问题,您应该逐步浏览上面的页面。

如果不是,您可以检查路径值,例如活动的包和名称以及过滤器。