不打开后面的主活动,打开Android对话框活动。

6
我正在编写一个程序,当收到短信时可以提供快速回复对话框。

但是,我得到了一个意外的结果。当我接收到短信时,适当的对话框活动会显示正确的电话号码和消息,但是在其后面还有第二个活动,这是我的程序中的“默认”活动(当我启动应用程序时它就会打开)。

我不希望出现第二个活动。快速回复活动应该单独出现在用户之前所做的任何事情上方。

这个“悬浮”的活动:

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);

清单文件(Manifest):
<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

我发现在清单文件中的活动定义中,唯一有效的方法是:

android:launchMode="singleInstance"

当对话框消失时,您需要重新启动主/默认活动。注意:您将失去之前启动的所有状态,因此这不是一个理想的解决方案。

更新:

您也可以通过以下方式实现:

Intent.FLAG_ACTIVITY_CLEAR_TASK

以下是我的做法:

  1. 打开原始/主活动
  2. 从服务中使用上述方法启动对话框式活动(主要活动消失)。
  3. 当用户关闭对话框时,再次启动主活动并附加一个意图(IS_BACK),在onCreate()中处理该意图并调用:

    moveTaskToBack(true);

这将使任务保持在顶部的对话框下面,而您的主要活动位于堆栈的后面。


0

你应该将活动的任务亲和性设置为与主活动不同的内容。这将使其与主活动分离,并作为一个独立的任务进行跟踪:

<activity android:name=".quickReply"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.Dialog"
          android:launchMode="singleTask"
          android:taskAffinity="quickReply"
          >

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接