андроид открытый диалог активность без открытия основной деятельности за ним - PullRequest
6 голосов
/ 19 июля 2010

Я пишу программу, которая предлагает диалог быстрого ответа при получении SMS.

Однако я получаю неожиданный результат.Когда я получаю SMS, появляется соответствующее диалоговое окно с отображением правильного номера телефона и сообщения, однако за ним следует второе действие, которое является действием «по умолчанию» в моей программе (оно открывается при запуске приложения)

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

Плавающее действие:

public class quickReply extends Activity {
String mNumber, mMessage;
TextView mMainText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mMainText = (TextView)findViewById(R.id.mainText);

    try{
        Intent i = getIntent();
        Bundle extras = i.getExtras();

        mNumber = extras.getString("theNumber");
        mMessage = extras.getString("theMessage");
         this.setTitle("Message From:" + mNumber);
         mMainText.setText(mMessage);


    } catch(Exception e) {
        mMainText.setText(e.getMessage());
    }      

}

}

Вызовдействие внутри onReceive ()

        Intent i = new Intent(context, quickReply.class);
    i.putExtra("theNumber", mNumber);
    i.putExtra("theMessage", mMessage);
    i.setFlags(
            Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);

Манифест:

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".quickReply"
              android:label="@string/app_name"
              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>
       <receiver android:name=".SmsReceiver"> 
        <intent-filter> 
            <action android:name=
                "android.provider.Telephony.SMS_RECEIVED" /> 
        </intent-filter> 
    </receiver>

</application>

Ответы [ 2 ]

3 голосов
/ 09 августа 2013

единственный способ, который я нашел, который работает, в вашем определении активности в манифесте:

android:launchMode="singleInstance"

, но затем вам нужно перезапустить основное / задание по умолчанию, как только диалоговое окно закрывается.ПРИМЕЧАНИЕ: вы потеряете все состояние с предыдущего запуска, так что это не идеальное решение.

ОБНОВЛЕНИЕ:

Вы также можете сделать это:

Intent.FLAG_ACTIVITY_CLEAR_TASK

вот что я сделал:

  1. откройте исходное / основное занятие
  2. из службы, запустите упражнение в стиле диалога, используя описанное выше (main проходит пока).
  3. когда пользователь закрывает диалоговое окно, снова запускает main с дополнительным намерением (IS_BACK), которое обрабатывается в onCreate () и вызывает:

    moveTaskToBack (true);

это сохранит задачу в диалоговом окне сверху, а главное в задней части стека.

0 голосов
/ 17 декабря 2015

Вы должны установить сродство задачи к чему-либо другому, чем ваша основная деятельность.Это отделит его от основной деятельности и будет отслеживать как отдельную задачу:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...