如何在锁定屏幕中显示未接来电号码?

Amo*_*ing 8 android screen-lock

我有做当屏幕被锁定,可以显示未接来电的应用程序,但我不知道如何表达锁定屏幕的屏幕,通话图像上未接来电的数量从MultiWaveView它已经定义,我一直在使用TRID OnDraw,与Canvaspaint,绘制指定坐标.但它不起作用.所以有人帮助我吗?非常感谢.

图片

如何在picutre中显示数字(例如,图片是位置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");

}

}
Run Code Online (Sandbox Code Playgroud)

}

这是自定义视图,只有MissedCallView(Context context,int missedCallNum)工作,它在叫public class MissCallObserver extends ContentObserver的时候听错过的被叫号码.但的onDraw不工作,因此应用程序不显示我有多少.

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;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我用画布和绘画绘制它,没有XML文件

然后我用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"
        />
Run Code Online (Sandbox Code Playgroud)

然后我明白了:

在此输入图像描述

现在我想在圈子的中心显示未接来电号码(在图片鼠标位置.),我不知道如何实现.

Rav*_*ale 5

你可以利用国旗 FLAG_SHOW_WHEN_LOCKED

有关锁定屏幕的更多信息我的android锁定

public static final int FLAG_SHOW_WHEN_LOCKED
Run Code Online (Sandbox Code Playgroud)

来自API级别5的行

窗口标志:在屏幕锁定时显示窗口的特殊标志.这将使应用程序窗口优先于密钥保护或任何其他锁定屏幕.可以与FLAG_KEEP_SCREEN_ON一起使用,在显示键保护窗口之前直接打开屏幕并显示窗口.可与FLAG_DISMISS_KEYGUARD一起使用,以自动完全取消非安全密钥保护

未接来电的UPDATE1:

您只需要查询手机中的任何调用,然后提取错过的一个然后只需获取查询返回的Cursor中的行数

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)
Run Code Online (Sandbox Code Playgroud)

在where子句中,您设置了选择数据的条件.在你的情况下,你需要所有类型相等的东西CallLog.Calls.MISSED_TYPE.

你可以选择来电者的姓名和他的号码,当然你可以指定更多的信息来查询,比如手机,家庭,工作等号码.
表达式等同于SQL查询,类似于:

SELECT CACHED_NAME, CACHED_NUMBER_LABEL, TYPE FROM CONTENT_URI WHERE TYPE=MISSED_TYPE
Run Code Online (Sandbox Code Playgroud)

UPDATE2:如何在picutre中显示2.

您需要做的就是在系统设置中设置警报字符串,如下所示:

String message = "2";
Settings.System.putString(context.getContentResolver(),
        Settings.System.NEXT_ALARM_FORMATTED, message);
Run Code Online (Sandbox Code Playgroud)