android: скрытие и уничтожение активности, запущенной с сервиса

Я новичок в разработке Android. Я пытаюсь монетизировать живые обои, которые я построил, и компания по доставке объявлений хочет, чтобы я вызывал их код из onCreate из активности.

Живые обои не имели активности, прежде чем я начал монетизировать его, будучи расширением для WallpaperService, поэтому я добавил его. Мне удалось создать активность и сделать ее полупрозрачной, но она не закрывается, когда диалог закрывается. Я не могу редактировать код диалога, так как он создается вызовом в .jar, поэтому я решил настроить слушателя, когда диалог отклонен, но я не смог найти практических примеров, которые могли бы помочь с код ниже.

LWP.java

public class SBLiveWallpaper extends WallpaperService {
    super.onCreate();
    Intent i = new Intent();
 // i.setClass(this, MainActivity.class);
    i.setComponent(new ComponentName("appname", "appname.MainActivity")); 
 // i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(i);
}

Activity_main.xml не имеет элементов (только RelativeLayout)

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AppBucksAPI.initialize(this, APPID, "APIKEY", true, null, null);
    AppBucksAPI.userOptOutDialog(this, "marketname");
}

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

Изменить для пояснения: я попытался изначально вызвать диалог непосредственно из onCreate() службы. Это приводит к сбою LWP на экране, где вы можете сделать его активным LWP. Ошибка, которую я получаю, это android.view.WindowManager $ BadTokenException: Невозможно добавить окно - токен null не для приложения.

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

I believe this errили means that there is a problem with the first parameter you are passing to the AppBucksAPI.userOptOutDialog method… the call which looks like this from the docs:

AppBucksAPI.userOptOutDialog(this, "");

This call expects an Activity или Activity context as the first parameter. It needs this because our default opt out dialog uses an AlertDialog call, which requires an active Activity fили it to display cилиrectly. If you are already creating an Activity along with your service, you should pass that activity as the first parameter instead of “this” (или you could move this call to the onCreate of that activity instead of onCreate fили the service).

If you don’t have an Activity in your app, I found this StackOverflow question which has an answer that may help (in a nutshell, you can create a transparent activity when your service starts up, and make the userOptOutDialog call from that instead of your service’s onCreate method): Display AlertDialog as system overlay window from Service

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

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

http://developer.android.com/reference/android/app/Activity.html#finishActivityFromChild(android.app.Activity, int)

или

http://developer.android.com/reference/android/app/Activity.html#finishFromChild(android.app.Activity)

Я попробую сегодня вечером.

0
nl ja de

3 ответы

При отклонении вашего диалога отправьте намерение вашей деятельности, чтобы оно закрылось.

Например

Поместите это в метод отклонения диалога:

sendBroadcast(new Intent(MainActivity.ACTION_TERMINATE));

Затем в MainActivity добавьте и зарегистрируйте BroadcastReceiver:

Добавьте поля для получателя и фильтр в действие:

private ActivityBroadcastReceiver mReceiver;
static final IntentFilter mFilter = new IntentFilter();
static {mFilter.addAction(ACTION_TERMINATE);}

Создайте его в onCreate ():

mReceiver = new ActivityBroadcastReceiver();

Зарегистрируйте его в onResume ():

    registerReceiver(mReceiver, mFilter);

Отмените регистрацию в onPause ():

unregisterReceiver(mReceiver);

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

private class ActivityBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            String action = intent.getAction();
            if (ACTION_TERMINATE.equals(action)) {
                finish();
            }
        } catch (Exception e) {
            Log.w(mTag, "Oops: " + e, e);
        }
    }
}
0
добавлено
Как я уже говорил, у меня нет доступа к диалоговому коду, так что это невозможно. Есть ли способ сделать прослушиватель или широковещательный приемник, который может работать на более глобальном уровне, возможно, получив дескриптор активности самого диалога? Если бы я мог слушать, что эта деятельность была уничтожена, изнутри родительской активности (прозрачной, которую я создал), тогда я мог бы просто называть finish() в своей собственной деятельности, когда вижу, что ребенок был уничтожен.
добавлено автор user2037908, источник

Если посмотреть на API AppBucks и документацию, я не думаю, что использование Activity является обязательным. Это самый распространенный способ.

Я думаю, вы можете вызвать метод AppBucks в своей службе onCreate?

0
добавлено
Привет спасибо. Я обновил свой оригинальный вопрос. Я изначально пробовал это, но это приводит к сбою LWP с ошибкой: android.view.WindowManager $ BadTokenException: Невозможно добавить нулевой токен окна не для приложения.
добавлено автор user2037908, источник

SDK AppBucks также предоставляет следующие функции:

setIconAdsEnabledForUser
setPushAdsEnabledForUser

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

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)