我有一个应用程序,我有不同的活动。在1个活动中,我希望当用户按下后退按钮时,我希望关闭应用程序并显示主屏幕
代码
public boolean onKeyDown(int keyCode, KeyEvent event)
{
//Handle the back button
if(keyCode == KeyEvent.KEYCODE_BACK)
{
//Ask the user if they want to quit
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Exit")
.setMessage("Really Exit ?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
})
.setNegativeButton("No", null)
.show();
return true;
}
else
{
return super.onKeyDown(keyCode, event);
}
}
当我运行此按钮并按后退按钮时,会显示主屏幕,但是当我第二次运行它时,我得到一个控制台输出
ActivityManager:警告:活动未启动,其当前任务已被置于最前面。
显示按下后退按钮的活动。 我认为该应用程序不会被杀死并在后台运行。简而言之,这不是我的应用程序的开始活动。
有人可以帮助我,我是初学者。
答案 0 :(得分:4)
答案 1 :(得分:3)
对于您用于进入其他活动的每个意图,您必须按照这种方式传递意图,只需将标记传递给下面及之后给出的每个意图使用 startActivity()开始活动你必须在下面给出的演示代码后添加完成()
Intent i=new Intent(firstActivity.this,secondActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
答案 2 :(得分:2)
您不能随意终止您的申请。当Android操作系统希望释放分配给它的资源时,它将执行此操作。您无法在android中实际实现退出应用程序概念。用户可以简单地离开您的Activity
并返回它。如果它必须从第一个Activity
重新启动或者从它离开的地方重新开始,那么它取决于Android操作系统,而不是你。
阅读这篇文章,了解如何设计Android应用程序的理念以及为什么您不想按照自己的意愿退出: Is quitting an application frowned upon?
答案 3 :(得分:1)
在该行finish();
之后添加startActivity(intent)
,完成您的活动。
由于
答案 4 :(得分:1)
您需要在代码中包含此类.........
public abstract class AppBaseActivity extends Activity {
public static final String FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION = "com.hrupin.FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION";
private BaseActivityReceiver baseActivityReceiver = new BaseActivityReceiver();
public static final IntentFilter INTENT_FILTER = createIntentFilter();
private static IntentFilter createIntentFilter(){
IntentFilter filter = new IntentFilter();
filter.addAction(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION);
return filter;
}
protected void registerBaseActivityReceiver() {
registerReceiver(baseActivityReceiver, INTENT_FILTER);
}
protected void unRegisterBaseActivityReceiver() {
unregisterReceiver(baseActivityReceiver);
}
public class BaseActivityReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION)){
finish();
}
}
}
protected void closeAllActivities(){
sendBroadcast(new Intent(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION));
}
}
然后你需要扩展此类中的所有其他类,如下例所示:
public class FirstActivity extends AppBaseActivity implements OnClickListener {
/** Called when the activity is first created. */
private Button buttonOpenNextActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first);
registerBaseActivityReceiver();
buttonOpenNextActivity = (Button)findViewById(R.id.buttonOpenNextActivity);
buttonOpenNextActivity.setOnClickListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
unRegisterBaseActivityReceiver();
}
@Override
public void onClick(View v) {
/* OPEN SECOND ACTIVITY.*/
startActivity(new Intent(this, SecondActivity.class));
}
}
另一堂课:
public class SecondActivity extends AppBaseActivity implements OnClickListener {
private Button buttonOpenNextActivity;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
registerBaseActivityReceiver();
buttonOpenNextActivity = (Button)findViewById(R.id.buttonOpenNextActivity);
buttonOpenNextActivity.setOnClickListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
unRegisterBaseActivityReceiver();
}
@Override
public void onClick(View v) {
/* OPEN THIRD ACTIVITY.*/
startActivity(new Intent(this, ThirdActivity.class));
}
}
最后一堂课:
public class ThirdActivity extends AppBaseActivity implements OnClickListener {
private Button buttonCloseAllActivities;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.third);
registerBaseActivityReceiver();
buttonCloseAllActivities = (Button)findViewById(R.id.buttonCloseAllActivities);
buttonCloseAllActivities.setOnClickListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
unRegisterBaseActivityReceiver();
}
@Override
protected void onBackPressed() {
closeAllActivities();
super.onBackPressed();
}
}
现在,当您在第三个活动中按下后退按钮时,所有其他活动也将完全完成。
1 /别忘了在onCreate中注册接收器,并在ondestroy()中取消注册()。答案 5 :(得分:0)
亲爱的,你的问题不明确。
据我所知,你应该使用broadCast Reciever完成应用程序并将意图传递给主屏幕。
MoreOver警告什么都没有,在运行你的应用程序之前只需在你的代码中输入Enter或者给出空格并保存它并重新运行你的应用程序。它会正常工作....
答案 6 :(得分:0)
如果你想在退回时退出你的应用程序,那么当你按下该屏幕上的后退按钮时你必须完成所有以前的活动,你应该使用 BROADCAST RECIEVER 的概念。 ....意味着你已经在该背面播放了一个意图,它将完成之前的所有活动。