2010-07-19 78 views
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); 

所述清单:

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

回答

3

我发现的唯一途径这样的作品,在您的活动定义清单:

android:launchMode="singleInstance" 

但你必须一次在对话框关闭,以重新启动您的主/默认的活动。注意:您将失去上次启动的所有状态,因此这不是理想的解决方案。

UPDATE:

,你也可以通过这样做:

Intent.FLAG_ACTIVITY_CLEAR_TASK 

所以这里就是我所做的:

  1. 从服务,推出开原/主要活动
  2. 使用上面的对话风格活动(主要去拜拜)。
  3. 当用户关闭对话框,与在的onCreate(处理),并调用一个额外的意图(IS_BACK)再次启动主:

    moveTaskToBack(真);

这将保持对话框顶部和您的主要在堆栈后面的任务。

0

您应该将活动的任务关联性设置为与主要活动不同的内容。这将从主要活动中分离出来,并将其作为单独的任务进行跟踪:

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