У нас возникает странная проблема. Наше приложение уже загружено в Google Play. Когда я загружаю наше приложение из Google Play, я узнал, что для нашего приложения созданы 2 ярлыка. Один из них создается во время загрузки и установки нашего приложения в Google Play. Когда я нажму, чтобы запустить наше приложение в Google Play, будет запущена наша активность заставки, которая создаст еще один ярлык (наш код проверяет, был ли ярлык уже создан или нет).Почему мой ярлык приложения создается дважды, когда мое приложение загружается и устанавливается Google Play.
Теперь оба ярлыка есть и действуют по-разному. Если я запустил приложение из первого ярлыка и ввел некоторую информацию на экран, а затем вернусь на главный экран. и снова щелкните тот же ярлык, эти введенные данные все еще существуют. Однако, если я нажму на другой ярлык после того, как я перейду на главный экран, заставка снова появится, все введенные данные исчезнут. Если я вижу запущенное приложение (нажмите «Домой» и удерживайте), я мог видеть только одно действие для нашего приложения.
Вот код мы создаем ярлык:
public static void createShortcut(Activity activity, int iconResId,
int appNameResId) {
Intent shortcutIntent = new Intent(
"com.android.launcher.action.INSTALL_SHORTCUT");
shortcutIntent.putExtra("duplicate", false);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
activity.getString(appNameResId));
Parcelable icon = Intent.ShortcutIconResource.fromContext(
activity.getApplicationContext(), iconResId);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
Intent extraIntent = new Intent(activity.getApplicationContext(),
activity.getClass());
extraIntent.setAction("android.intent.action.MAIN");
extraIntent.addCategory("android.intent.category.LAUNCHER");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, extraIntent);
activity.sendBroadcast(shortcutIntent);
}
здесь код, который мы проверяем, если дубликат ярлык уже создан, в основном мы проверяем, если ярлык с нашим именем приложения уже создан, который я что это не пуленепробиваемый, поскольку другое приложение будет использовать то же имя, что и наше приложение, например, я видел пару приложений «Фонарик». Другое дело, что это очевидно, наше приложение не обнаруживает ярлык, созданный из Google Play приложение:
public static Boolean isShortcutInstalled(Activity activity,
int appNameResId) {
final ContentResolver cr = activity.getContentResolver();
String authorityString = null;
if (Build.VERSION.SDK_INT >= 8) {
authorityString = "com.android.launcher2.settings";
} else {
authorityString = "com.android.launcher.settings";
}
Uri contentUri = Uri.parse("content://" + authorityString
+ "/favorites?notify=true");
Cursor cursor = cr.query(contentUri, new String[] { "title",
"iconResource" }, "title=?",
new String[] { activity.getString(appNameResId) }, null);
if (cursor != null && cursor.getCount() > 0) {
return true;
}
return false;
}
, кстати, вот еще один вопрос на SO: Is it possible to prevent the Google Play app from creating a shortcut of my App on install?, однако ответ на него не очень однако, полностью ответьте на вопрос.
Я действительно растерялся, мог ли кто-то пролить свет здесь?
Update 1 (17 декабря):
здесь андроида файл манифеста (я заменил какое-то название, чтобы удалить некоторую конфиденциальную информацию). SplashActivity является точкой входа для нашего приложения.
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<application
android:name=".xxApplication"
android:allowBackup="true"
android:icon="@drawable/xx_logo"
android:label="@string/app_label"
android:theme="@style/xxTheme.Holo" >
<activity
android:name="com.xx.xx.android.MainActivity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="com.xx.xx.android.TestActivity"
android:label="TestActivity"
android:screenOrientation="portrait" >
<!--
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
-->
</activity>
<activity
android:name="com.LS.zxing22.android.CaptureActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@style/xxTheme.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden" >
</activity>
<activity
android:name=".ui.EnrollmentActivity"
android:screenOrientation="portrait"
android:theme="@style/xxTheme.NoTitleBar" >
</activity>
<activity
android:name=".ui.LoginActivity"
android:screenOrientation="portrait"
android:theme="@style/xxTheme.NoTitleBar" >
</activity>
<activity
android:name=".ui.AgreementActivity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ui.UsagePolicyActivity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ui.FinishActivity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ui.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/xxTheme.Holo.Menu" >
</activity>
<activity
android:name=".ui.AccessPasswordActivity"
android:label="@string/activity_label_access_password"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ui.LoginCodeActivity"
android:label="@string/activity_label_login_code"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="org.wordpress.passcodelock.PasscodeUnlockActivity"
android:screenOrientation="portrait"
android:theme="@style/xxTheme.NoTitleBar" >
</activity>
<activity
android:name="org.wordpress.passcodelock.PasscodePreferencesActivity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="org.wordpress.passcodelock.PasscodeManagePasswordActivity"
android:screenOrientation="portrait"
android:theme="@style/xxTheme.NoTitleBar" >
</activity>
<activity
android:name=".ui.SplashActivity"
android:screenOrientation="portrait"
android:theme="@style/xxTheme.NoTitleBar.Splash" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.TutorialActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.xx.xx.android.ui.TutorialActivity.Action" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<service
android:name="com.xx.xx.android.services.xxService"
android:enabled="true" >
<intent-filter>
<action android:name="com.xx.xx.android.services.IxxServiceRemoteInterface" />
</intent-filter>
</service>
<service
android:name="com.xx.xx.android.services.NetworkIntentService"
android:enabled="true" >
</service>
<service
android:name="com.xx.xx.android.services.xxAppIntentService"
android:enabled="true" >
</service>
<service
android:name="com.xx.xx.android.services.DeviceAttributeUploadIntentService"
android:enabled="true" >
</service>
<service
android:name="com.xx.xx.android.services.HeartbeatIntentService"
android:enabled="true" >
</service>
<service
android:name="com.xx.xx.android.services.DeviceWipeIntentService"
android:enabled="true" >
</service>
</application>
В недавнем обновлении вы изменили имя (или имя пакета) корневой активности (с ACTION = MAIN и CATEGORY = DEFAULT)? –
мы изменили имя пакета, чтобы сделать его все в нижнем регистре, чтобы совместить соглашение об именах java. поэтому я не опубликовал оригинальное приложение в Google Play и переиздал его. Однако перед установкой нового приложения я удалил старое приложение. Новое приложение впервые опубликовано в Google Play с этим именем пакета (имя нижнего регистра) – windfly2006
, пожалуйста, поделитесь своим манифестом ... –