我的代码工作正常,除非手机闲置几分钟.
我的代码:
AndroidManifest.xml:
<?xml version="1.0" enCoding="utf-8" ?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID" package="com.example.myfirstapp" androID:versionCode="7" androID:versionname="7"> <uses-sdk androID:minSdkVersion="7" androID:targetSdkVersion="10"></uses-sdk> <uses-permission androID:name="androID.permission.READ_PHONE_STATE"/> <uses-permission androID:name="androID.permission.MODIFY_PHONE_STATE"/> <uses-permission androID:name="androID.permission.CALL_PHONE" /> <application androID:label="@string/app_name" androID:icon="@drawable/ic_launcher"> <receiver androID:name=".MyPhonebroadcastReceiver" androID:enabled="true"> <intent-filter androID:priority="99999"> <action androID:name="androID.intent.action.PHONE_STATE" /> </intent-filter> </receiver> <activity androID:name=".Call" > </activity> </application></manifest>
MyPhonebroadcastReceiver.java:
public class MyPhonebroadcastReceiver extends broadcastReceiver{ public voID onReceive(final Context context,Intent intent) { Thread pageTimer = new Thread(){ public voID run(){ try{ sleep(700); } catch (InterruptedException e){ e.printstacktrace(); } finally { Intent i = new Intent(); i.setClass(context,Call.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_top); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); i.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); i.putExtra("INCOMING_NUMBER",incomingNumber); i.setAction(Intent.ACTION_MAIN); i.addcategory(Intent.category_LAUNCHER); context.startActivity(i); } } }; pageTimer.start(); }}
Call.java:
package com.example.myfirstapp;import androID.app.Activity;import androID.os.Bundle;public class Call extends Activity{ protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getwindow(). addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); getwindow().addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); getwindow().addFlags(Intent.FLAG_ACTIVITY_CLEAR_top); setContentVIEw(R.layout.main); }}
顺便说一句 – 我试着等待屏幕在睡眠前醒来(700)并没有帮助
(在MyPhonebroadcastReceiver.java中)
...try { if (pm.isScreenOn()) { sleep(700); } else { while (!pm.isScreenOn()) { // Do nothing... } sleep(700); }}...解决方法 当手机屏幕关闭且有来电时,还有更多工作要做(醒来,处理键盘保护视图……)因此,通话中活动需要更长时间才能显示,这导致了呼叫活动的开始时间早于通话中活动的开始 – >通话活动位于最前面
没有确切的时间需要显示通话中活动(您已经尝试过并看到700毫秒是不够的)
我的解决方案:继续跟踪Call活动的状态:
>如果它仍然在顶部并且用户没有解雇它(或任何条件
解雇),只需使用处理程序进行跟踪
>如果有任何其他活动转到前台,则调用活动
试着回到顶部
我的样本活动:
public class MainActivity extends Activity { private ActivityManager mActivityManager; private boolean mdismissed = false; private static final int MSG_ID_CHECK_top_ACTIVITY = 1; private static final long DELAY_INTERVAL = 100; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); Window window = getwindow(); window.addFlags(WindowManager.LayoutParams.FLAG_disMISS_KEyguard); mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); mHandler.sendEmptyMessageDelayed(MSG_ID_CHECK_top_ACTIVITY,DELAY_INTERVAL); } private Handler mHandler = new Handler() { public voID handleMessage(androID.os.Message msg) { if (msg.what == MSG_ID_CHECK_top_ACTIVITY && !mdismissed) { List<RunningTaskInfo> tasks = mActivityManager .getRunningTasks(1); String topActivityname = tasks.get(0).topActivity .getClassname(); if (!topActivityname.equals(MainActivity.this .getComponentname().getClassname())) { // Try to show on top until user dismiss this activity Intent i = new Intent(); i.setClass(MainActivity.this,MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_top); i.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); startActivity(i); } sendEmptyMessageDelayed(MSG_ID_CHECK_top_ACTIVITY,DELAY_INTERVAL); } }; };}总结
以上是内存溢出为你收集整理的android – 活动d出来电屏幕全部内容,希望文章能够帮你解决android – 活动d出来电屏幕所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)