Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Igor-vrn
7 / 7 / 2
Регистрация: 14.12.2013
Сообщений: 94
#1

Как вызвать Activity не из Activity? - Программирование Android

16.05.2014, 00:49. Просмотров 2308. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 00:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как вызвать Activity не из Activity? (Программирование Android):

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

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

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

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

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

Как вызвать другой activity в android ?
Как вызвать другой activity в android ??? Добавлено через 1 минуту ...

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

Решение

Может так:
Java
1
this.context.startActivity(new Intent(this.context, MyActivity.class));
1
Igor-vrn
7 / 7 / 2
Регистрация: 14.12.2013
Сообщений: 94
16.05.2014, 21:49  [ТС] #3
Цитата Сообщение от 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
wolf13666
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 14
06.12.2017, 21:20 #4
Тема ещё актуальна? У меня похожая проблема
Java
1
2
private final static String calc = "com.android.calculator2";
startActivity( new Intent(calc));
В манифесте фильтр прописан. Эмулирую сразу на телефон, андрюша 6. Но вместо запуска калькулятора, приложение открывает само себя.
Попробовал как в посте выше, через флаги, ноль результата. В чем ошибка, кто может подсказать?
0
ILNAR_93
Android
236 / 236 / 49
Регистрация: 19.01.2013
Сообщений: 1,855
Записей в блоге: 3
07.12.2017, 21:33 #5
Цитата Сообщение от wolf13666 Посмотреть сообщение
У меня похожая проблема
Попробуй так

Java
1
2
3
PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("com.android.calculator2");
context.startActivity(intent);
0
wolf13666
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 14
09.12.2017, 23:22 #6
К сожалению не помогло, приложение компилится, но при запуске падает
0
wolf13666
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 14
11.12.2017, 20:37 #7
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.getPackageManager()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2346)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2506)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5491)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.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.getPackageManager()' on a null object reference
at android.content.ContextWrapper.getPackageManager(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.performLaunchActivity(ActivityThread.java:2336)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2506)*
at android.app.ActivityThread.-wrap11(ActivityThread.java)*
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)*
at android.os.Handler.dispatchMessage(Handler.java:102)*
at android.os.Looper.loop(Looper.java:148)*
at android.app.ActivityThread.main(ActivityThread.java:5491)*
at java.lang.reflect.Method.invoke(Native Method)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)*
0
ILNAR_93
Android
236 / 236 / 49
Регистрация: 19.01.2013
Сообщений: 1,855
Записей в блоге: 3
11.12.2017, 20:48 #8
Не знаю почему там у тебя проблемы..

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

Java
1
2
3
PackageManager pm = getPackageManager();
            Intent intent = pm.getLaunchIntentForPackage("com.instagram.android");
            startActivity(intent);
0
zoleg
28 / 28 / 5
Регистрация: 10.01.2012
Сообщений: 285
11.12.2017, 23:48 #9
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
11.12.2017, 23:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2017, 23:48
Привет! Вот еще темы с решениями:

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

Изменение layout-элементов одного activity из другого activity
Здравствуйте! Я хочу изменить размер или цвет текста TextView в одном...

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

Из одной Activity запустить функцию другой Activity
например есть Activity2 которое я показываю в Dialog окошке, там у меня...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru