Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
7 / 7 / 2
Регистрация: 14.12.2013
Сообщений: 94

Как вызвать Activity не из Activity?

16.05.2014, 00:49. Показов 5096. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приложение перехватываем входящие СМС. Есть класс унаследованный от BroadcastReceiver, который обозначен в манифесте как приемник сообщений. Все хорошо срабатывает, принятая СМС-ка передается в этот класс. Этот класс распаковывает Intent, вызвавший этот класс (как раз содержащий СМС-ку) и, перепаковывая его, вызывает Activity, которая должна обработать и вывести СМС-ку. Все работает до самого context.startActivity , ошибок не выдается, но и активити нужная не открывается.
В интенте установлен флаг FLAG_ACTIVITY_NEW_TASK (нужен, если активити вызывать не из другой активности. Попросту говоря если вызываем активность не из таска, но этот таск нужно создать и там запускать активити). Все бы хорошо, но активити не стартует...

Приведу код ресивера:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class SmsReceiverBroadcast extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        /*
         * Получили входящее СМС. Перепаковываем интент и вызываем нашу активити, которая дешифрует письмо
         */
        try {
        Bundle bundle = intent.getExtras();    
        Object pdus = (Object) bundle.get("pdus");
        SmsMessage msg = SmsMessage.createFromPdu(pdus.toString().getBytes());
        Intent in = new Intent("CryptedSMS");
        in.putExtra("CryptedSMS", bundle);
        in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(in);
        
        }catch(NullPointerException e) {
            Toast.makeText(context, "Схватил нулл где-то. смотри чего в коде не так", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }      
}
Нужная активити находится и исключения ActivityNotFoundException не генерируется. Все бы хорошо, но она не отображается. Куда копать, ребят?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2014, 00:49
Ответы с готовыми решениями:

Вызвать из одной activity функцию другой activity
вызвать из одного activity функцию другой activity Подскажите, можно ли такое реализовать? Допустим у меня есть основная активити и...

Как из одного Activity перенести фотку в другое Activity?
Собственно необходимо отобразить фотографию в activity2, которую загрузили в activity1 из галереи Это код из activity1.java в...

Как добавить cardview в activity с другой activity?
У меня есть активность(1), куда нужно добавить cardview. в этой же активности есть кнопка(1), при нажатии которой открывается другая...

8
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
16.05.2014, 08:09
Лучший ответ Сообщение было отмечено Igor-vrn как решение

Решение

Может так:
Java
1
this.context.startActivity(new Intent(this.context, MyActivity.class));
1
7 / 7 / 2
Регистрация: 14.12.2013
Сообщений: 94
16.05.2014, 21:49  [ТС]
Цитата Сообщение от Rube Посмотреть сообщение
Может так
не может. вызвать активити нужно НЕ из активити. У BroadcastReceiver просто нет поля context, и вообще он никак не связан с контекстами, кроме как принимает в качестве параметра у своему обязательному методу onReceive(). В моем коде нет ошибок, просто активити не всплывает. К тому же Intent лучше не трогать. Он у меня параметры передает...

Добавлено через 54 минуты
Цитата Сообщение от Rube Посмотреть сообщение
Может так
Беру свои слова назад. Частично. Спасибо вам. В частности за то, что подсказали хороший конструктор Intent. Я новичок в этом деле, учусь. Старался вызывать активити по их Action (стал получать ActivityNotFoundException). О том, что можно по имени класса обратиться не подумал, да и не знал, чего уж лукавить. Написал

Java
1
2
3
4
5
Intent in = new Intent(context, MessageReceiver.class);
        in.setAction("CryptedSMS");
        in.putExtra("SMS", bundle);
        in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(in);
Все заработало. Активити вызывается. Тему можно закрывать и оставить поколениям
0
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 14
06.12.2017, 21:20
Тема ещё актуальна? У меня похожая проблема
Java
1
2
private final static String calc = "com.android.calculator2";
startActivity( new Intent(calc));
В манифесте фильтр прописан. Эмулирую сразу на телефон, андрюша 6. Но вместо запуска калькулятора, приложение открывает само себя.
Попробовал как в посте выше, через флаги, ноль результата. В чем ошибка, кто может подсказать?
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
07.12.2017, 21:33
Цитата Сообщение от wolf13666 Посмотреть сообщение
У меня похожая проблема
Попробуй так

Java
1
2
3
PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("com.android.calculator2");
context.startActivity(intent);
0
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 14
09.12.2017, 23:22
К сожалению не помогло, приложение компилится, но при запуске падает
0
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 14
11.12.2017, 20:37
ILNAR_93, вот logcat
Кликните здесь для просмотра всего текста
Process: de.example.war.startactvt, PID: 18904
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.example.war.startactvt/de.example.war.startactvt.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManage r()' on a null object reference
at android.app.ActivityThread.performLaunch Activity(ActivityThread.java:2346)
at android.app.ActivityThread.handleLaunchA ctivity(ActivityThread.java:2506)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessa ge(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handl er.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(Activity Thread.java:5491)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:618)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManage r()' on a null object reference
at android.content.ContextWrapper.getPackag eManager(ContextWrapper.java:92)
at de.example.war.startactvt.MainActivity.< init>(MainActivity.java:14)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity( Instrumentation.java:1090)
at android.app.ActivityThread.performLaunch Activity(ActivityThread.java:2336)
at android.app.ActivityThread.handleLaunchA ctivity(ActivityThread.java:2506)*
at android.app.ActivityThread.-wrap11(ActivityThread.java)*
at android.app.ActivityThread$H.handleMessa ge(ActivityThread.java:1363)*
at android.os.Handler.dispatchMessage(Handl er.java:102)*
at android.os.Looper.loop(Looper.java:148)*
at android.app.ActivityThread.main(Activity Thread.java:5491)*
at java.lang.reflect.Method.invoke(Native Method)*
at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:728)*
at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:618)*
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
11.12.2017, 20:48
Не знаю почему там у тебя проблемы..

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

Java
1
2
3
PackageManager pm = getPackageManager();
            Intent intent = pm.getLaunchIntentForPackage("com.instagram.android");
            startActivity(intent);
0
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
11.12.2017, 23:48
Context всегда можно добыть в любом месте примерно так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class contextApp extends Application {
    private static contextApp instance;
 
    public static contextApp getInstance() {
        return instance;
    }
 
    public static Context getContextApp(){
        //return instance;
        return instance.getApplicationContext();
    }
 
    @Override
    public void onCreate() {
        instance = this;
        super.onCreate();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.12.2017, 23:48
Помогаю со студенческими работами здесь

Как в Navigation Drawer Activity засунуть Activity?
Здравствуйте! у меня такая проблема navigation drawer activity работает только с фрагментами как мне засунуть активити во фрагмент и...

Как вызвать БД в новом activity
Нужно в новом классе вызвать БД. Нашел в интернете пример, но почему-то, при запуске приложения на телефоне, переходя в эту самую...

Как вызвать другой activity в android ?
Как вызвать другой activity в android ??? Добавлено через 1 минуту @Override public void onClick(View v)...

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было принято из-за скорости. Но...

Android - Передача данных с одного Activity на другое Activity
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном Activity , а обработка и вывод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru