我认为这是一个基本问题。是否有任何选项可以通过使用意图来停止活动。
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554"));
startActivity(intent);
这是我的代码。如果用户忙或什么的话,我想停止这个活动(这意味着,我想放弃这个电话)。我能做些什么?我试过这个:
if (condition) {
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5554"));
startActivity(intent);
}else {
this.finish();
}
但没有用。有人有建议吗?
答案 0 :(得分:25)
我几天前遇到过这个问题,我很高兴地告诉你,我已经找到了解决这个问题的方法。
首先,对于您要停止的活动,请在AndroidManifest.xml
:
android:launchMode="singleTop"
我将使用CheckBox示例。当它被检查时,活动开始,未选中时将杀死活动。
示例活动A正在调用活动B,然后使用意图将其杀死。
代码放入A:
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(A.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (enable.isChecked()) {
intent.putExtra("keep", true);
startActivity(intent);
}
else
{
intent.putExtra("keep", false);
startActivity(intent);
}
}
});
要放入B的代码:
boolean keep;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.B);
intent = this.getIntent();
boolean keep = intent.getExtras().getBoolean("keep");
if(keep==true)
{
//execute your code here
}
}
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
keep = intent.getExtras().getBoolean("keep");
if(keep==false)
{
B.this.finish();
}
}
说明:这基本上是这样做的,当选中复选框时,它调用活动并传递一个布尔值,如果它是真的,则活动保持活动并被带到前台。现在,如果您没有传递标记singleTop
,那么将创建此活动的许多实例。 singleTop
确保只调用相同的实例。现在,当取消选中该复选框时,将传递一个新值keep,并在B中验证。如果未选中,则活动A将传递false,因此B将从onNewIntent()
函数中终止。
P.S - 您也可以关闭来自其他活动的活动B.只是用 如果其他活动是C:
Intent intent = new Intent(C.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("keep", false);
startActivity(intent);
答案 1 :(得分:0)
您可以关闭游戏商店的背景数据并播放不进入游戏商店的服务。只会说, "可能无法加载" 这是我发现停止意图的唯一方法
答案 2 :(得分:0)
This worked for me:
AndroidManifest.xml:
<activity android:name=".ui.activities.SettingsActivity"
android:launchMode="singleTop"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.STOP_SERVICE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
意图:
Intent stopBackgroundServiceIntent = new Intent(this, SettingsActivity.class);
// Remove the activity when finish is called
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK );
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);