Страница 1 из 1
Можно ли программно изменить Manifest?
Добавлено: 20 ноя 2014, 17:00
grem17
Тут вот какое дело...
суть программы - через броадкаст перехватываю смс и создаю активность (она не основная в программе)
если окно основной программы открыто и приходит несколько смс, то через броадкаст вызывается несколько вариантов активностей - мне так и надо
но когда основная программа закрыта и приходит несколько смс - то копии активити почему то не создаются (только одна)
что сделано:
в манифесте, для вызываемой активности прописано
android:launchMode="standard"
из броадкаста вызов делаю вот так:
Код: Выделить всё
Intent mIntent = new Intent(context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
context.startActivity(mIntent);
как решить проблему вызова копии активности, при закрытой основной программе? пробовал запуск делать через сервис - не вышло. Предпологаю что при закрытой программе не считывается манифест, можно ли как то задать у активности свойство android:launchMode="standard" не в манифесте, может так будет работать?
Re: Можно ли программно изменить Manifest?
Добавлено: 23 ноя 2014, 14:56
Leeroy
А попробуй вообще убрать лаунчМод android:launchMode="standard"
Re: Можно ли программно изменить Manifest?
Добавлено: 24 ноя 2014, 08:25
grem17
попробовал, не помогло
вот как выглядит манифест
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.test.prog"
android:versionCode="1"
android:versionName="1" >
<uses-sdk
android:minSdkVersion="13"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:debuggable="false">
<activity
android:name="ru.test.prog.MainActivity"
android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SmsWindow"
android:label="@string/title_sms_window"
android:theme="@android:style/Theme.Dialog">
</activity>
<activity android:name=".Help"
android:label="@string/help"
android:theme="@android:style/Theme.Dialog">
</activity>
<receiver
android:name="ru.test.prog.MessageReceiver">
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" >
</action>
</intent-filter>
</receiver>
</application>
</manifest>
единственный вариант который приходит в голову - это сделать прогу как сервис, может тогда манифест будет в памяти подгружен постоянно и вызов окна будет происходить через сервис...в общем попробую, потом отпишусь
Re: Можно ли программно изменить Manifest?
Добавлено: 26 ноя 2014, 10:38
grem17
помогите если кто чем может, решение до сих пор не могу найти
Re: Можно ли программно изменить Manifest?
Добавлено: 26 ноя 2014, 11:03
doter.ua
В главном активити создаешь список. Когда приходит интент
public void onReceiveIntent(Context context, Intent intent)
проверяешь на экшен (показывает кто вызвал, т.е. СМСка)
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { желательно вместо явного текста экшена использовать константу.
добавляешь в список СМСку, сейвишь где-нибудь нужную инфу (текст смс).
и по клику на элемент списка открываешь Активити, которое будет вызываться для всех таких кликов. Ибо нефиг создавать 100500 активностей. Юзер не супермэн - не сможет читать 10 смс одновременно, а память активностями засоряется.
Re: Можно ли программно изменить Manifest?
Добавлено: 27 ноя 2014, 09:17
grem17
doter.ua
идею понял, реализацию - нет
броадкаст перехватывает входящую смс, передает данные в другой класс и запускает его активити, тут все понятно...
допустим одновременно, или с интервалом в 1 сек., поступает вторая смс, как передать данные в уже запущенное активити и обработать их там? не понимаю...
вызов из броадкаста сейчас реализован вот так
Код: Выделить всё
Intent mIntent = new Intent(context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
context.startActivity(mIntent);
может есть ссылка, где почитать можно?
Re: Можно ли программно изменить Manifest?
Добавлено: 27 ноя 2014, 14:25
grem17
провел эксперимент, из броадкаста сделал последовательно вызов 3х активити - сработало без запущенной основной программа, теперь надо придумать, как первую запускать со значением ACTION_MAIN, а остальные ACTION_DEFAULT
Код: Выделить всё
Intent mIntent = new Intent(Intent.ACTION_MAIN, null, context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
mIntent.putExtra("TimeSMSsent", TimeSMSsent);
mIntent.putExtra("TimeNow", TimeNow);
mIntent.putExtra("ServCentr", ServCentr);
context.startActivity(mIntent);
Intent m = new Intent(Intent.ACTION_DEFAULT, null, context, SmsWindow.class);
m.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
m.putExtra("NomerSMS", NomerSMS);
m.putExtra("BodySMS", BodySMS);
m.putExtra("TimeSMSsent", TimeSMSsent);
m.putExtra("TimeNow", TimeNow);
m.putExtra("ServCentr", ServCentr);
context.startActivity(m);
Intent m1 = new Intent(Intent.ACTION_DEFAULT, null, context, SmsWindow.class);
m1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
m1.putExtra("NomerSMS", NomerSMS);
m1.putExtra("BodySMS", BodySMS);
m1.putExtra("TimeSMSsent", TimeSMSsent);
m1.putExtra("TimeNow", TimeNow);
m1.putExtra("ServCentr", ServCentr);
context.startActivity(m1);