请问,如何使安卓软件中的Activity在后台以及关闭屏幕后能继续运行?
如题,请问,如何使安卓软件中的Activity在后台以及关闭屏幕后能继续运行?由于是修改一个源代码,源代码中以Activity方式访问该类比较多,所以不适改成Servic...
如题,请问,如何使安卓软件中的Activity在后台以及关闭屏幕后能继续运行?
由于是修改一个源代码,源代码中以Activity方式访问该类比较多,所以不适改成Service(说要改成Service的方案就算了,不切实际)。
在改Activity类的“protected void onPause()”方法中把“super.onPause();”去掉是可以后台运行,但是5秒左右会弹出错误提示,用LogCat看到“android.app.SuperNotCalledException”,原因是“did not call through to super.onPause()”,也就是说必须执行“super.onPause();”,才不会出错,但是这个错误提示只要一直留着不关掉,软件是可以一直后台运行的(音乐一直正常播放)。
由此可以推测,安卓Activity是可以后台的,只要不执行“super.onPause();”就行,只不过系统等待超时(5秒左右)后会强制结束进程。
还有去掉“super.onPause();”后,在关闭屏幕后,估计软件也会出错,但是只要不开屏幕就没事(音乐一样能正常播放),但是只要一开屏幕软件就会直接消失,连错误提示都没有。
请问我该怎么修改,才能使安卓Activity在后台(切换到其它应用或者返回桌面时)能够正常运行,以及关闭屏幕后也能够正常运行?不胜感激!!
(附:该Activity的加载方式:先“new Intent”,然后对Intent用“putExtra”设置一些信息进去,最后用“startActivityForResult”来启动) 展开
由于是修改一个源代码,源代码中以Activity方式访问该类比较多,所以不适改成Service(说要改成Service的方案就算了,不切实际)。
在改Activity类的“protected void onPause()”方法中把“super.onPause();”去掉是可以后台运行,但是5秒左右会弹出错误提示,用LogCat看到“android.app.SuperNotCalledException”,原因是“did not call through to super.onPause()”,也就是说必须执行“super.onPause();”,才不会出错,但是这个错误提示只要一直留着不关掉,软件是可以一直后台运行的(音乐一直正常播放)。
由此可以推测,安卓Activity是可以后台的,只要不执行“super.onPause();”就行,只不过系统等待超时(5秒左右)后会强制结束进程。
还有去掉“super.onPause();”后,在关闭屏幕后,估计软件也会出错,但是只要不开屏幕就没事(音乐一样能正常播放),但是只要一开屏幕软件就会直接消失,连错误提示都没有。
请问我该怎么修改,才能使安卓Activity在后台(切换到其它应用或者返回桌面时)能够正常运行,以及关闭屏幕后也能够正常运行?不胜感激!!
(附:该Activity的加载方式:先“new Intent”,然后对Intent用“putExtra”设置一些信息进去,最后用“startActivityForResult”来启动) 展开
2个回答
展开全部
实现activity后台运行有两种方法:
方法一:
添加下列代码即可:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
方法二:
此方法其实不是主要是屏蔽Keycode_Back,让它不结束(finish())Activity,直接显示HOME界面。
PackageManager pm = getPackageManager();
ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_HOME), 0);
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
ActivityInfo ai = homeInfo.activityInfo;
Intent startIntent = new Intent(Intent.ACTION_MAIN);
startIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startIntent.setComponent(new ComponentName(ai.packageName,
ai.name));
startActivitySafely(startIntent);
return true;
} else
return super.onKeyDown(keyCode, event);
}
void startActivitySafely(Intent intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.unabletoopensoftware,
Toast.LENGTH_SHORT).show();
} catch (SecurityException e) {
Toast.makeText(this, R.string.unabletoopensoftware,
Toast.LENGTH_SHORT).show();
Log
.e(
TAG,
"Launcher does not have the permission to launch "
+ intent
+ ". Make sure to create a MAIN intent-filter for the corresponding activity "
+ "or use the exported attribute for this activity.",
e);
}
}
2015-02-09
展开全部
添加加通知栏、不要退出,可以做到。。。。服务较好
更多追问追答
追问
请问能不能给一下具体的实现方法?我需要的是能在切换到其他应用或者返回桌面的时候该Activity还能后台播放音乐,而该Activity只能是Activity,不能改成Server的情况下。
追答
楼主,Activity + service 。。。。。。。。。。。。不是server
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询