getExtras() возвращает ноль на уровне приложения (-класс)

На моем Application уровень я получаю ноль за getExtras(), но на Activity Уровень я могу видеть их правильно.

public class MyApplication extends Application 
{
    @Override
    public void onCreate() {
        super.onCreate();
        Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.MyApp");
        if (intent != null){
            String mStaticWorldUrl = intent.getStringExtra("arg1Name");
            String mStaticWorldIconUrl = intent.getStringExtra("arg2Name");
            Log.i("LOG", mStaticWorldUrl + " ---  " + mStaticWorldIconUrl);
        }
    }
}

Я вызываю приложение из некоторых ярлыков, которые были созданы с помощью этого кода:
(- каждый ярлык имеет разные Extras отправлено Intent)

    // create a shortcut for the specific app
public static void createShortcutForPackage(Context context,
        String packageName, String className, String shortcutName,
        String arg1Name, String arg1Val, String arg2Name, String arg2Val,
        int iconID) {

    Intent intent = new Intent();
    intent.setComponent(new ComponentName(packageName, className));

    PackageManager pm = context.getPackageManager();

    Context pkgContext = createPackageContext(context, packageName);
    if (pkgContext == null)
        return;

    Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
    Intent shortcutIntent = pm.getLaunchIntentForPackage(packageName);

    if (arg1Name != null)
        shortcutIntent.putExtra(arg1Name, arg1Val);

    if (arg2Name != null)
        shortcutIntent.putExtra(arg2Name, arg2Val);

    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(context, iconID));
    shortcut.putExtra("duplicate", false);
    context.sendBroadcast(shortcut);
}  

как я могу прочитать это Extras на Application уровень?
или есть какой-либо другой способ создать различные ярлыки для приложения и прочитать его "параметры" данные на Application?

2 ответа

Решение

Это концептуальная ошибка, с которой сталкиваются, чтобы получить данные в классе приложения, используя метод getExtra, который является намерением

Причина этой проблемы:

  • Дополнительных данных нет, поскольку запрашиваемое намерение было тем, которое было сгенерировано на одну строку ранее, это намерение, которое ОС сгенерировала для пакета, как было запрошено в следующем коде: Intent intent = getPackageManager(). GetLaunchIntentForPackage("com.example.M‌ Yapp");

  • Объекты Intent в экземпляре класса Application: они не являются
    доставлен туда

Давайте разберемся в следующих вещах, которые нужно использовать в будущем, пока кто-то хочет получить данные на уровне приложения

  • Что такое Намерение?
  • Какая польза от намерения?
  • Какие еще вещи мы можем использовать для достижения этой цели?

Что такое Намерение?

  • Intent предоставляет средство для выполнения позднего связывания во время выполнения между кодом в разных приложениях. Его наиболее важное применение - запуск мероприятий, где его можно рассматривать как связующее звено между действиями. По сути, это пассивная структура данных, содержащая абстрактное описание выполняемого действия.

  • Дополнительно - это комплект любой дополнительной информации. Это может быть использовано для предоставления расширенной информации компоненту. Например, если у нас есть действие для отправки сообщения электронной почты, мы могли бы также включить дополнительные фрагменты данных, чтобы указать тему, текст и т. Д.

Какая польза от намерения?

Используйте для намерений облегчить связь между компонентами несколькими способами, следующие являются стандартным использованием

  • Чтобы начать деятельность.
  • Чтобы начать службу.
  • Доставить трансляцию

Какие еще вещи мы можем использовать для достижения этой цели?

  • Есть много вещей, которые мы можем использовать, чтобы достичь этого и решить эту проблему.

  • Но сейчас здесь я упомянул только один, который является стандартным и безопасным для использования приложения

  • Поставщик содержимого. Предложить файл из вашего приложения другому приложению означает отправить в принимающее приложение URI содержимого файла и предоставить временные разрешения на доступ к этому URI. URI содержимого с временными разрешениями доступа URI безопасны, поскольку они применяются только к приложению, которое получает URI, и срок их действия истекает автоматически.

Application класс является статическим для приложения: для процесса вашего приложения существует только один его экземпляр. Если ваше приложение было запущено с нормальным запуском Intentвместо созданного вами ярлыка никаких дополнений не будет. Процесс приложения не умирает при нажатии HOME или BACK, поэтому Intent Используется для запуска пакета не может быть то, что вы думаете, что должно быть.

Вам не нужно смотреть на Intent на Application уровень. Intent объекты не предназначены для "отправки" туда, а скорее к Activity, Service или же BroadcastReceiver,