2013-10-15 2 views
0

Мне нужно создать активность, аналогичную журналу вызовов Android. Я не нашел много информации об этом. что я нашел этот пример, который имеет основной вид деятельности, где есть 3 кнопки:Журнал вызовов стиля Android

1- список исходящих вызовов 2- сходящейся список вызовов 3- Пропущенный вызов списка

И каждая кнопка посылает на другой вид деятельности который является списком с деталями каждого вызова.

Но мне нужно, прежде всего, объединить все это приложение в один макет, который показывает все пропущенные, исходящие и входящие звонки за раз, указанные по дате. Я теперь, что это должно быть просто, но я не могу это сделать, потому что я прошу вас о помощи. Следующее, что я должен сделать после этого, - изменить макет списка, чтобы отобразить журнал вызовов, как показывает андроид, с иконками телефона и возможностью вызвать этого человека, если вы коснетесь имени.

Но, прежде всего, мне нужно приложение, которое мне нужно.

Это код основной раскладке, где находятся 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 pes в то время, как это делает андроид, но не достигают этого.

+0

Какую проблему вы сталкиваетесь. Не отображается ли список или вы столкнулись с каким-либо сбоем? –

+0

Итак, теперь я получил его, вы хотите, чтобы все типы вызовов отображались в одном списке. Не фильтруется ни по одному типу. Правильно? –

+0

@Changdeo Jadhav, пытаясь объединить все, я не могу свернуть приложение, но список ничего не показывает. Я хочу, чтобы все типы вызовов отображались в одном списке, а не были отфильтрованы в списке ... но я хочу использовать каждый тип вызовов, а затем добавлять значок для каждого вызова в зависимости от того, является ли это пропущенным вызовом, исходящим вызовом или входящим вызовом call – masmic

ответ

1

Изменить этот код

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); 

Для этого

 int callType = extras.getInt(CallLogsDemoActivity.CALL_TYPE); 
    ArrayList<CallLogModel> collectiveList = new ArrayList<CallLogModel>(); 
    collectiveList.addAll(CallLogsDemoActivity.outgoingList); 
    collectiveList.addAll(CallLogsDemoActivity.incomingList); 
    collectiveList.addAll(CallLogsDemoActivity.missedcallList); 
    listAdapter = new CallLogsArrayAdapter(this,collectiveList); 
    mainListView.setAdapter(listAdapter); 
+0

Или у вас есть только один список в возврате из вашей асинтезы и используйте его вместо добавления всего в один позже. –

+0

Спасибо @Changdeo Jadhav, таким образом я получаю 3 типа вызовов в том же самом arraylist. Но мне все же нужно объединить оба мероприятия. Я имею в виду, когда я запускаю приложение, сразу перейдите в журнал вызовов, не имея этих 3 кнопок – masmic

+0

. Я отвечу на этот ответ, если вы можете мне помочь. – masmic

Смежные вопросы