80,351
社区成员
发帖
与我相关
我的任务
分享
下面是我的处理,所有操作都在MultiWaveView.java中
1、
public MultiWaveView(Context context, AttributeSet attrs) {
super(context, attrs);
..............
Log.i(TAG, ">>MultiWaveView attrs");
registerMissCallContentObservers();
.......................}
2、 private void registerMissCallContentObservers() {
Log.i(TAG, "registerMissCallContentObservers");
ContentResolver resolver = mContext.getContentResolver();
resolver.registerContentObserver(android.provider.CallLog.Calls.CONTENT_URI,true, mMissCallObserver);
}
这个函数自己添加的。
3、每隔10s发一个空消息
private final ContentObserver mMissCallObserver = new MissCallObserver();
private class MissCallObserver extends ContentObserver {
public MissCallObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
Log.i(TAG, "onChange");
//Delete the code, Ported to the message processing
mUpdateMissCallNum.removeMessages(UPDATE_START);
mUpdateMissCallNum.sendEmptyMessageDelayed(UPDATE_START, DELAY_TIME);
}
}
4、收到消息就查找数据库,获取未接电话个数
private final Handler mUpdateMissCallNum = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.i(TAG, "mUpdateMissCallNum");
switch (msg.what) {
case UPDATE_START:
Log.i(TAG, "UPDATE_START");
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;
Log.i(TAG, "sTempMissedCallCount is:"+sTempMissedCallCount);
//mStrMissCallNum=sTempMissedCallCount.toString();
//mTVInCallNum.setText(Integer.toString(sTempMissedCallCount)); }
}
}
).start();
}
break;
default:
break;
}
}
};
5、在MultiWaveView.java中的函数onDraw画上电话个数(即拨号图标右上角)
@Override
protected void onDraw(Canvas canvas) {
mOuterRing.draw(canvas);
for (TargetDrawable target : mTargetDrawables) {
if (target != null) {
target.draw(canvas);
}
}
for (TargetDrawable target : mChevronDrawables) {
if (target != null) {
target.draw(canvas);
}
}
mHandleDrawable.draw(canvas);
if(sTempMissedCallCount>0)
{
Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.RED);
Log.i(TAG, "Integer.toString(sTempMissedCallCount) is:"+Integer.toString(sTempMissedCallCount));
canvas.drawText(Integer.toString(sTempMissedCallCount),40,310,paint);
}
}
但这样来电话,不会马上更新电话个数图标。熄屏后再点亮就会显示。存在很多问题
1、如何在哪里来调用我的代码入口registerMissCallContentObservers();还是有其他办法
2、该在哪里怎样画上未接电话个数?
public MultiWaveView(Context context, AttributeSet attrs) {
super(context, attrs);
Log.i(TAG, ">>MultiWaveView attrs");
final IntentFilter filter = new IntentFilter();
filter.addAction("com.android.phone.NotificationMgr.MissedCall_intent");
context.registerReceiver(new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent)
{
Log.i(TAG, "onReceive");
final String action = intent.getAction();
if ("com.android.phone.NotificationMgr.MissedCall_intent".equals(action))
{
sNewMissedCallCount = intent.getExtras().getInt("MissedCallNumber");
Log.i(TAG, "sNewMissedCallCount is:"+sNewMissedCallCount);
//mHandler.sendMessage(mUpdateMissCallNum.obtainMessage(MSG_LOCK_SCREEN_MISSED_CALL,mMissedCall, 0));
}
}
}, filter);
不知道这样对不对?但来电话,MultiWaveView不会跑到,当然后面的onReceive、registerMissCallContentObservers也没有收到。但熄屏时(而不是我要的来电时)会跑MultiWaveView,onReceive还是不会收到、但registerMissCallContentObservers会跑到。
请高手指教:1、该如何获取未接电话个数?
2、来电话时屏幕点亮,在哪里注册未接电话数据库监听registerMissCallContentObservers
<com.android.internal.widget.multiwaveview.MultiWaveView
android:id="@+id/unlock_widget"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:targetDrawables="@array/lockscreen_targets_with_phone"
android:targetDescriptions="@array/lockscreen_target_descriptions_with_phone"
android:directionDescriptions="@array/lockscreen_direction_descriptions"
android:handleDrawable="@drawable/ic_lockscreen_handle"
android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right"
android:outerRadius="@dimen/multiwaveview_target_placement_radius"
android:snapMargin="@dimen/multiwaveview_snap_margin"
android:hitRadius="@dimen/multiwaveview_hit_radius"
android:horizontalOffset="0dip"
android:verticalOffset="60dip"
android:feedbackCount="3"
android:vibrationDuration="20"
/>