更新:
我想要得到的是:你在我的应用程序中的任何地方,你出于任何原因离开我的应用程序,不仅是当你按下主页按钮而且还有FOR EXPLPLES:
>您按主页按钮检查另一个应用程序然后想要返回我的应用程序.
>您有关于whatsup或电子邮件的通知显示新消息,您打开您的whatsup或打开电子邮件,然后返回到我的应用程序.
3-您离开手机一段时间后再想检查我的应用程序.
4-按下电源按钮关闭手机(锁定屏幕),然后打开锁定,想要返回我的应用程序.
我的意思是任何时候你出于任何原因离开我的应用程序,但没有按回退回按钮,这将退出整个应用程序
然后想再次返回我的应用程序必须打开
您登录屏幕再次输入您的用户名和密码.
我叫完();对于Splash活动和登录活动.
我试过:清单中的Login活动中的android:clearTaskOnLaunch =“true”,但它确实没有.
任何建议将被认真考虑,
请写完整的工作代码.
登录活动:
public class Login extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); Button b = (Button) findViewById(R.id.loginbutton); b.setonClickListener(new OnClickListener() { public void onClick(View v) { EditText username = (EditText) findViewById(R.id.login); EditText password = (EditText) findViewById(R.id.password); if(username.getText().toString().length() > 0 && password.getText(). toString().length() > 0 ) { if(username.getText().toString().equals("test") && password.getText(). toString().equals("test")) { Intent intent = new Intent(Login.this,Menu.class); startActivity(intent); finish(); } } } }); } }
菜单活动:
public class Menu extends ListActivity { String classes[] = { "City1","City2","City3","City4","City5"}; @Override protected void onCreate(Bundle savedInstanceState) { // Todo Auto-generated method stub super.onCreate(savedInstanceState); setlistadapter(new ArrayAdapter<String>(Menu.this,android.R.layout.simple_list_item_1,classes)); } @Override protected void onListItemClick(ListView l,View v,int position,long id) { // Todo Auto-generated method stub super.onListItemClick(l,v,position,id); String cheese = classes[position]; try { Class ourClass = Class.forName("com.test.demo.MyCity"); Intent ourIntent = new Intent(Menu.this,ourClass); ourIntent.putExtra("cheese",cheese); startActivity(ourIntent); } catch (ClassNotFoundException e) { e.printstacktrace(); } }}
MyCity活动:
public class MyCity extends Activity { TextView tv1; String city; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.city); initializeTextViews();} private void initializeTextViews() { tv1=(TextView)findViewById(R.id.city_tv); city=getIntent().getStringExtra("cheese"); if(city.equalsIgnoreCase("City1")){ tv1.setText(Html.fromHtml(getString(R.string.city1)));} else if(city.equalsIgnoreCase("City2")){ tv1.setText(Html.fromHtml(getString(R.string.city2)));} else if(city.equalsIgnoreCase("City3")){ tv1.setText(Html.fromHtml(getString(R.string.city3)));} else if(city.equalsIgnoreCase("City4")){ tv1.setText(Html.fromHtml(getString(R.string.city4)));} else if(city.equalsIgnoreCase("City5")){ tv1.setText(Html.fromHtml(getString(R.string.city5)));} }}
我的表现:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".Splash" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Login" android:label="@string/app_name" android:clearTaskOnLaunch="true"> <intent-filter> <action android:name="com.test.demo.LOGIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name=".Menu" android:label="@string/app_name" > <intent-filter> <action android:name="com.test.demo.MENU" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name=".MyCity" android:label="@string/app_name" > <intent-filter> <action android:name="com.test.demo.MYCITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
第二更新:我达到了我想要的一半,但仍然有一些步骤,我无法实现它解释如下:
通过将android:clearTaskOnLaunch =“true”应用于Splash活动,
并阻止菜单活动上的后退按钮行为:
@Override public boolean onKeyDown(int keyCode,KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { moveTaskToBack(true); return true; } return super.onKeyDown(keyCode,event); } }
所以现在按下主页按钮离开我的应用程序然后返回我的应用程序:
直接进入登录活动.
但现在的主要目标是:
如果:
屏幕在您离开手机时锁定,或轻按电源按钮以锁定手机.
要么
通知中打开的消息
要么
要么
你有CALL并回答它,
然后返回我的应用程序,它不会进入登录活动,但您将返回到您所在的页面.
请提出任何建议,谢谢.
最新消息:
我使用另一个代码覆盖主页按钮并控制后退按钮而不是应用:android:clearTaskOnLaunch =“true”到清单中的Splash活动,只需将下行代码应用于Menu活动:
@Override public boolean onKeyDown(int keyCode,KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { moveTaskToBack(true); return true;} else if (keyCode == KeyEvent.KEYCODE_HOME) { Intent i=new Intent(Menu.this,Login.class); startActivity(i); finish(); return true;} return super.onKeyDown(keyCode,event);}
解决方法
测试:
>三星S3运行android 4.0.4
>模拟器运行android 2.3.1
基本思路:我们将创建一个RequireLoginActivity,除了LoginActivity之外,我们的所有活动都会扩展它.
>使用startActivity的味道从一个RequireLoginActivity跳转到另一个RequireLoginActivity.
>通过完成当前活动,从一个RequireLoginActivity跳回到之前的RequireLoginActivity.
>隐藏后返回RequireLoginActivity(我们应该在这里显示登录!)
我的解决方案的基本思想是拥有2个计数器:已启动活动的数量(startCounter)和暂停活动的数量(pauseCounter).每次活动开始时我们都会增加startCounter.同样,当活动暂停时,pauseCounter应该递增.在我们的onResume函数中,我们将通过比较2个计数器来决定是否进入登录.如果2个计数器相等,我们将gotoLogin()!
让我解释:
在任何时候,案例1都可以被捕获,因为在开始新活动时,我们的startCounter将始终比pauseCounter更大1.这是真的,因为我们将始终有一个额外的活动已启动但未暂停.
此外,案例3很容易被捕获,因为一旦你离开我们的应用程序,比如说,使用HOME按钮,我们将增加pauseCounter,2个计数器将变得相等.应用程序恢复后,onResume将决定gotoLogin().
案例2有点棘手,但也很简单.诀窍是覆盖finish()函数并将startCounter递减一次,将pauseCounter递减两次.请记住,在完成活动时,会调用onPause并且我们的计数器是相等的.现在通过递减startCounter一次和pauseCounter两次,我们最终返回到前一个活动的计数器值,并且当前一个活动恢复时,startCounter将保持更大的pauseCounter 1.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。