如何在locking屏幕上显示未接电话号码?

我已经做了一个应用程序,可以显示错过的电话,当屏幕被locking,但我不知道如何显示未locking的电话号码在locking的屏幕上。调用图像是从已定义的MultiWaveView,我有trid使用OnDraw ,用Canvaspaint ,画出指定的坐标,但它不起作用。任何人都可以帮助我吗?非常感谢。

图片

如何在图片中显示数字(例如图片是位置2 )?

EDIT1

现在我已经在应用程序中得到了正确的未接电话号码,但是没有正确显示

类:

framework\base\core\java\com\android\internal\widget\multiwaveview\MissedCallView.java

 public class MissedCallView extends View { private static final String TAG = "MissedCallViews"; public static final int UPDATESTART = 10; private static final int DELAYTIME = 10000; private int sTempMissedCallCount=-1; Context mContext; Canvas mCanvas; public MissedCallView(Context context) { super(context); Log.i(TAG, "MissedCallView1"); mCanvas=new Canvas(); } public MissedCallView(Context context, AttributeSet attrs) { super(context, attrs); Log.i(TAG, "MissedCallView2"); mCanvas=new Canvas(); } public MissedCallView(Context context,int missedCallNum) { super(context); sTempMissedCallCount=missedCallNum; Log.i(TAG, "MissedCallView3"); mCanvas=new Canvas(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(sTempMissedCallCount>0) { Paint paint=new Paint(Paint.ANTIALIASFLAG); paint.setColor(Color.RED); Log.i(TAG,"Integer.toString(sTempMissedCallCount)is:"+Integer.toString(sTempMissedCallCount)); canvas.drawText(Integer.toString(sTempMissedCallCount),40,310,paint);//50 invalidate(); Log.i(TAG, "invalidate"); } } 

}

这是自定义视图,只有MissedCallView(Context context,int missedCallNum)作品,它在public class MissCallObserver extends ContentObserver时候,听错过的被叫号码。但onDraw不工作,所以应用程序不显示数字I已经得到了。

EDIT2:

现在我在自定义hanlder中调用函数,每10秒处理一次

 private final Handler mUpdateMissCallNum = new Handler() { @Override public void handleMessage(Message msg) { Log.i(TAG, "mUpdateMissCallNum"); switch (msg.what) { case UPDATESTART: Log.i(TAG, "UPDATESTART"); sNewMissedCallCount = getMissedCallCount(mContext); if (sNewMissedCallCount != sTempMissedCallCount) { Log.i(TAG, "sNewMissedCallCount != sTempMissedCallCount"); new Thread(new Runnable() { public void run() { Log.i(TAG, "sNewMissedCallCount is:"+sNewMissedCallCount); Log.i(TAG, "sTempMissedCallCount is:"+sTempMissedCallCount); sTempMissedCallCount = sNewMissedCallCount; mMissedCallView=new MissedCallView(mContext,sTempMissedCallCount); //call my costum view here Log.i(TAG, "sTempMissedCallCount is:"+sTempMissedCallCount); } } ).start(); } break; default: break; } } } 

我用canvas绘制,没有XML文件

然后我locking屏幕上的XML:Keyguardscreentabunlock.xml(framework \ base \ core \ res \ res \ layout)。

这是在系统中使用Ripple Lock:

 <com.android.internal.widget.multiwaveview.MultiWaveView android:id="@+id/unlockwidget" android:orientation="horizontal" android:layoutwidth="matchparent" android:layoutheight="matchparent" android:layout_alignParentBottom="true" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:directionDescriptions="@array/lockscreen_direction_descriptions" android:handleDrawable="@drawable/ic_lockscreen_handle" android:waveDrawable="@drawable/ic_lockscreen_outerring" android:outerRadius="@dimen/multiwaveview_target_placement_radius" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:horizontalOffset="0dip" android:verticalOffset="60dip" android:feedbackCount="3" android:vibrationDuration="20" /> 

那么我得到这个:

在这里输入图像说明

现在我想显示在圆圈中心的未接电话号码(在图像的鼠标位置),我不知道如何实现。

Solutions Collecting From Web of "如何在locking屏幕上显示未接电话号码?"

你可以使用FLAG_SHOW_WHEN_LOCKED标志

有关锁屏的更多信息我的机器人锁

 public static final int FLAG_SHOW_WHEN_LOCKED 

来自API级别5的行

窗口标志:当屏幕locking时,可以显示窗口的特殊标志。 这将使应用程序窗口优先于密钥守卫或任何其他locking屏幕。 可以使用FLAG_KEEP_SCREEN_ON来打开屏幕并直接显示窗口,然后显示密钥保护窗口。 可以与FLAG_DISMISS_KEYGUARD一起使用来自动完全驳回不安全的密钥

未接电话的UPDATE1:

所有你需要的是查询电话的任何电话,然后提取错过了一个&然后只是得到的行数在游标是由查询返回

 String[] projection = { CallLog.Calls.CACHED_NAME, CallLog.Calls.CACHED_NUMBER_LABEL, CallLog.Calls.TYPE }; String where = CallLog.Calls.TYPE+"="+CallLog.Calls.MISSED_TYPE; Cursor c = this.getContentResolver().query(CallLog.Calls.CONTENT_URI, selection,where, null, null); c.moveToFirst(); Log.d("CALL", ""+c.getCount()); //do some other operation if(c.getCount() == SOME_VALUE_TO_START_APP_ONE) 

在where子句中,为数据select设置条件。 在你的情况下,你需要一切types等于CallLog.Calls.MISSED_TYPE

您可以select来电者的名字和他的号码,当然你可以指定更多的信息来查询,如移动,家庭,工作的号码types。
该expression式等同于SQL查询,如下所示:

 SELECT CACHED_NAME, CACHED_NUMBER_LABEL, TYPE FROM CONTENT_URI WHERE TYPE=MISSED_TYPE 

UPDATE2:如何在图片中显示2。

您只需在系统设置中设置警报string,如下所示:

 String message = "2"; Settings.System.putString(context.getContentResolver(), Settings.System.NEXT_ALARM_FORMATTED, message);