我必須創建一個類似於android通話記錄的活動。我還沒有找到關於它的很多信息。我發現了什麼是本實施例中,具有一個主活動,其中有3個按鈕:Android風格通話記錄
1-呼出列表 2-內遷呼叫列表 3-未接電話列表中
而且每個按鈕發送到另一個活動這是一個列表視圖,每個調用的細節。
但我需要的,是首先要統一所有這個應用程序到一個唯一的佈局,至極顯示所有錯過,outoging和遷入同時通話,按日期上市。我現在認爲這應該很簡單,但我無法做到這一點,這是因爲我向你求助。在此之後,我應該做的下一件事是修改listview佈局,以顯示android顯示的通話記錄,通過手機圖標和如果您觸摸該名稱可以調用該人的選項。
但首先,我需要應用程序以我需要的方式運行。
這是主要佈局的代碼,其中有3個按鈕:
public class CallLogsDemoActivity extends Activity {
public static ArrayList<CallLogModel> outgoingList;
public static ArrayList<CallLogModel> incomingList;
public static ArrayList<CallLogModel> missedcallList;
public static final int OUTGOING_CALLS = 1;
public static final int INCOMING_CALLS = 2;
public static final int MISSED_CALLS = 3;
public static final String CALL_TYPE = "TYPE";
private Button inBtn, outBtn, missedBtn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
outBtn = (Button) findViewById(R.id.button1);
inBtn = (Button) findViewById(R.id.button2);
missedBtn = (Button) findViewById(R.id.button3);
inBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showIncomingList();
}
});
outBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showOutGoingList();
}
});
missedBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showMissedList();
}
});
outgoingList = new ArrayList<CallLogModel>();
incomingList = new ArrayList<CallLogModel>();
missedcallList = new ArrayList<CallLogModel>();
new ReadLogs().execute();
}
private void showIncomingList() {
Intent intent = new Intent(this, CallLogs.class);
intent.putExtra(CALL_TYPE, INCOMING_CALLS);
startActivity(intent);
}
private void showMissedList() {
Intent intent = new Intent(this, CallLogs.class);
intent.putExtra(CALL_TYPE, MISSED_CALLS);
startActivity(intent);
}
private void showOutGoingList() {
Intent intent = new Intent(this, CallLogs.class);
intent.putExtra(CALL_TYPE, OUTGOING_CALLS);
startActivity(intent);
}
private String getDuration(long milliseconds) {
int seconds = (int) (milliseconds/1000) % 60;
int minutes = (int) ((milliseconds/(1000 * 60)) % 60);
int hours = (int) ((milliseconds/(1000 * 60 * 60)) % 24);
if (hours < 1)
return minutes + ":" + seconds;
return hours + ":" + minutes + ":" + seconds;
}
private String getDateTime(long milliseconds) {
Date date = new Date(milliseconds);
//return DateFormat.getDateTimeInstance().format(new Date());
return date.toLocaleString();
}
private void readCallLogs() {
missedcallList.clear();
incomingList.clear();
outgoingList.clear();
Cursor callLogCursor = getContentResolver().query(
android.provider.CallLog.Calls.CONTENT_URI, null, null, null,
android.provider.CallLog.Calls.DEFAULT_SORT_ORDER);
if (callLogCursor != null) {
while (callLogCursor.moveToNext()) {
String id = callLogCursor.getString(callLogCursor
.getColumnIndex(CallLog.Calls._ID));
String name = callLogCursor.getString(callLogCursor
.getColumnIndex(CallLog.Calls.CACHED_NAME));
String cacheNumber = callLogCursor.getString(callLogCursor
.getColumnIndex(CallLog.Calls.CACHED_NUMBER_LABEL));
String number = callLogCursor.getString(callLogCursor
.getColumnIndex(CallLog.Calls.NUMBER));
long dateTimeMillis = callLogCursor.getLong(callLogCursor
.getColumnIndex(CallLog.Calls.DATE));
long durationMillis = callLogCursor.getLong(callLogCursor
.getColumnIndex(CallLog.Calls.DURATION));
int callType = callLogCursor.getInt(callLogCursor
.getColumnIndex(CallLog.Calls.TYPE));
String duration = getDuration(durationMillis * 1000);
String dateString = getDateTime(dateTimeMillis);
if (cacheNumber == null)
cacheNumber = number;
if (name == null)
name = "No Name";
CallLogModel callLogModel = new CallLogModel(name, cacheNumber,
duration, dateString);
if (callType == CallLog.Calls.OUTGOING_TYPE) {
outgoingList.add(callLogModel);
} else if (callType == CallLog.Calls.INCOMING_TYPE) {
incomingList.add(callLogModel);
} else if (callType == CallLog.Calls.MISSED_TYPE) {
missedcallList.add(callLogModel);
}
}
callLogCursor.close();
}
}
private class ReadLogs extends AsyncTask<Void, Void, Void> {
/* Object */
ProgressDialog dialog;
/*
* Function name: onPreExecute Parameters: Void params Return: void
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = ProgressDialog.show(CallLogsDemoActivity.this,
"Reading Call Logs...", "Please wait...", true);
}
/*
* Function name: doInBackground Parameters: Void params Return: void
*/
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
readCallLogs();
return null;
}
/*
* Function name: onPostExecute Parameters: Void result Return: void
*/
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
}
}
}
而這是其他活動至極顯示列表:
public class CallLogs extends Activity {
private ListView mainListView;
private ArrayAdapter<CallLogModel> listAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
mainListView = (ListView) findViewById(R.id.listView);
mainListView.setSmoothScrollbarEnabled(true);
Bundle extras = getIntent().getExtras();
int callType = extras.getInt(CallLogsDemoActivity.CALL_TYPE);
if (callType == CallLogsDemoActivity.OUTGOING_CALLS)
listAdapter = new CallLogsArrayAdapter(this,
CallLogsDemoActivity.outgoingList);
else if (callType == CallLogsDemoActivity.INCOMING_CALLS)
listAdapter = new CallLogsArrayAdapter(this,
CallLogsDemoActivity.incomingList);
else if (callType == CallLogsDemoActivity.MISSED_CALLS)
listAdapter = new CallLogsArrayAdapter(this,
CallLogsDemoActivity.missedcallList);
mainListView.setAdapter(listAdapter);
}
public void initElements() {
listAdapter.notifyDataSetChanged();
}
}
如上所述,我嘗試將此代碼統一爲只顯示一個佈局並顯示所有呼叫ti同時,android也會這麼做,但是沒有達到它。
你面對的是什麼問題。是不是顯示列表或您面臨任何崩潰? –
好的,現在我明白了,您希望所有的呼叫類型都顯示在一個列表中。沒有按任何類型過濾。對? –
@Changdeo Jadhav當試圖統一所有,我不會崩潰的應用程序,但列表不顯示任何內容。我想是在一個列表,在列表中沒有通過過濾來顯示所有的呼叫類型...但我想十個分量每個呼叫類型,然後以一個圖標取決於它是否是一個missedcall,outoging來電或遷入添加到每個呼叫請致電 – masmic