未收到通话记录 CACHED_NAME
Call Logs not getting CACHED_NAME
我正在尝试从 CALL-LOGS
中获取所有号码的列表,这些号码在我的联系人中是 NOT,
当 我的联系人 中的任何人给我打电话时,我遇到了 issue
。
游标“c”正在返回该数字,因为“name
”(CACHED_NAME
) 是 null
”。
但是当我打开 call-log
应用程序然后再次打开我的 application
时,该数字不会返回,因为现在“"name"(CACHED_NAME
)”具有值.
我可以从我的应用程序刷新通话记录中的数据吗?
我可以构建一个 function
,它可以检查 phone 联系人中是否存在号码。
但是我如何将这个函数与游标适配器一起使用。我尝试在 bindview 中使用此函数,但仍然为该数字创建了空白元素。我想使用 CusrorAdapter
.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
pview = inflater.inflate(R.layout.fragment_call, container, false);
ListView lvCall = (ListView) pview.findViewById(R.id.lvCall);
Uri uri = Uri.parse("content://call_log/calls");
ContentResolver cr = getActivity().getContentResolver();
**Cursor c = cr.query(uri, null, "name is null", null, "date DESC");**
adapter = new CursorAdapter(getActivity().getBaseContext(), c) {
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return li.inflate(R.layout.call_list, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
**if (contactExists(cursor.getString(cursor.getColumnIndex("NUMBER")))) {
return;
}**
txt_call_number = (TextView) view.findViewById(R.id.txt_call_number);
txt_call_id = (TextView) view.findViewById(R.id.txt_call_id);
txt_call_number.setText(cursor.getString(cursor.getColumnIndex("NUMBER")));
txt_call_id.setText(cursor.getString(cursor.getColumnIndex("_ID")).trim());
}
};
lvCall.setAdapter(adapter);
return pview;
}
谢谢
P.S。上面的示例代码中可能有一些技术性的 error
或 missing code
,因为我刚刚从我的 application
.
中提取了所需的 code
您无法使用您的应用程序直接访问更新后的通话记录“CACHED_NAME”。
public boolean contactExists(Context context, String number) {
/// number is the phone number
Uri lookupUri = Uri.withAppendedPath(
PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(number));
String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
Cursor cur = context.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null);
try {
if (cur.moveToFirst()) {
return true;
}
} finally {
if (cur != null)
cur.close();
}
return false;
}
现在,您可以查看 bindView
功能。
@Override
public void bindView(View view, Context context, Cursor cursor) {
txt_call_number = (TextView) view.findViewById(R.id.txt_call_number);
txt_call_id = (TextView) view.findViewById(R.id.txt_call_id);
if (contactExists(cursor.getString(cursor.getColumnIndex("NUMBER")))) {
txt_call_number.setVisibility(View.GONE);
txt_call_id.setVisibility(View.GONE);
view.setVisibility(View.GONE);
return;
}else{
txt_call_number.setText(cursor.getString(cursor.getColumnIndex("NUMBER")));
txt_call_id.setText(cursor.getString(cursor.getColumnIndex("_ID")).trim());
}
}
希望这对你有帮助。
编码愉快...:-)
我正在尝试从 CALL-LOGS
中获取所有号码的列表,这些号码在我的联系人中是 NOT,
当 我的联系人 中的任何人给我打电话时,我遇到了 issue
。
游标“c”正在返回该数字,因为“name
”(CACHED_NAME
) 是 null
”。
但是当我打开 call-log
应用程序然后再次打开我的 application
时,该数字不会返回,因为现在“"name"(CACHED_NAME
)”具有值.
我可以从我的应用程序刷新通话记录中的数据吗?
我可以构建一个 function
,它可以检查 phone 联系人中是否存在号码。
但是我如何将这个函数与游标适配器一起使用。我尝试在 bindview 中使用此函数,但仍然为该数字创建了空白元素。我想使用 CusrorAdapter
.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
pview = inflater.inflate(R.layout.fragment_call, container, false);
ListView lvCall = (ListView) pview.findViewById(R.id.lvCall);
Uri uri = Uri.parse("content://call_log/calls");
ContentResolver cr = getActivity().getContentResolver();
**Cursor c = cr.query(uri, null, "name is null", null, "date DESC");**
adapter = new CursorAdapter(getActivity().getBaseContext(), c) {
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return li.inflate(R.layout.call_list, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
**if (contactExists(cursor.getString(cursor.getColumnIndex("NUMBER")))) {
return;
}**
txt_call_number = (TextView) view.findViewById(R.id.txt_call_number);
txt_call_id = (TextView) view.findViewById(R.id.txt_call_id);
txt_call_number.setText(cursor.getString(cursor.getColumnIndex("NUMBER")));
txt_call_id.setText(cursor.getString(cursor.getColumnIndex("_ID")).trim());
}
};
lvCall.setAdapter(adapter);
return pview;
}
谢谢
P.S。上面的示例代码中可能有一些技术性的 error
或 missing code
,因为我刚刚从我的 application
.
code
您无法使用您的应用程序直接访问更新后的通话记录“CACHED_NAME”。
public boolean contactExists(Context context, String number) {
/// number is the phone number
Uri lookupUri = Uri.withAppendedPath(
PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(number));
String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
Cursor cur = context.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null);
try {
if (cur.moveToFirst()) {
return true;
}
} finally {
if (cur != null)
cur.close();
}
return false;
}
现在,您可以查看 bindView
功能。
@Override
public void bindView(View view, Context context, Cursor cursor) {
txt_call_number = (TextView) view.findViewById(R.id.txt_call_number);
txt_call_id = (TextView) view.findViewById(R.id.txt_call_id);
if (contactExists(cursor.getString(cursor.getColumnIndex("NUMBER")))) {
txt_call_number.setVisibility(View.GONE);
txt_call_id.setVisibility(View.GONE);
view.setVisibility(View.GONE);
return;
}else{
txt_call_number.setText(cursor.getString(cursor.getColumnIndex("NUMBER")));
txt_call_id.setText(cursor.getString(cursor.getColumnIndex("_ID")).trim());
}
}
希望这对你有帮助。
编码愉快...:-)