2017-10-18 10 views
0

私は彼の最初のアプリに取り組んでいるノブです。あなたが忙しく、その日にいくつかの電話を受けることができないと想像してください。このアプリは、あなたが逃した通話のログを表示し、1回のボタンクリックで通話を開始することができます。一度にすべてではありません - あなたが最初に見逃した番号から始まり、自動的にコールが終了したときにアプリケーションに戻り、2番目の番号を自動的にダイヤルします。リストが空になるか、呼び出しが完了するまで続きます。これは私のアプリは今のように見える私のものです:欠落した番号のログを呼び出す?

https://imgur.com/tke7SDx

私は不在着信を記録し、それらを表示する、と私はループを開始することになっています「呼び出しを開始」ボタンを持っています。私はどのようにしてonClickが失敗した電話番号1を発し、次にno2などの電話を逃してしまい、Googleのゲームがそれほど強くはないものの、それについて多くを見つけられないようにする方法はわかりません。これは私がコールの詳細を取得する方法である:

public String getCallDetails() { 

    StringBuffer sb = new StringBuffer(); 

//  if 
// (ActivityCompat.checkSelfPermission(getApplicationContext(), 
// Manifest.permission.READ_CALL_LOG) != 
// PackageManager.PERMISSION_GRANTED) { 
// 
//   return ; 
//  } 

    Cursor managedCursor = getApplicationContext().getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " DESC"); 

    int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
    int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
    int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
    int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 

    sb.append("\n"); 

    while (managedCursor.moveToNext()) { 
     String phNumber = managedCursor.getString(number); 
     String callType = managedCursor.getString(type); 
     String callDate = managedCursor.getString(date); 
     Date callDayTime = new Date(Long.valueOf(callDate)); 
     String callDuration = managedCursor.getString(duration); 
     String dir = null; 
     int dircode = Integer.parseInt(callType); 

     switch (dircode) { 
      case CallLog.Calls.OUTGOING_TYPE: 
       dir = "OUTGOING"; 
       break; 

      case CallLog.Calls.INCOMING_TYPE: 
       dir = "INCOMING"; 
       break; 

      case CallLog.Calls.MISSED_TYPE: 
       dir = "MISSED"; 
       break; 
     } 

     // Getting the current date and time using the date class 
     Date d = new Date(); 

     if (dir == "MISSED") { 

      sb.append("\n Phone Number: " + phNumber + " \n Call Date: " + callDayTime + "\n"); 
      sb.append(" ---------------------------------------------------\n \n"); 

     } 
    } 

    managedCursor.close(); 
    return sb.toString(); 

} 

そして、これが私のボタンのonClickです:

callBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      try { 

//     String phone = ???? 
// Using the ACTION.CALL intent, you're going straight to the first 
// call      
//     Intent callIntent = new 
//     Intent(Intent.ACTION_CALL, Uri.fromParts("tel", 
//     phone, null)); 

       // Check for permission, write yes/no etc. here 
       if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CALL_PHONE) != 
         PackageManager.PERMISSION_GRANTED) { 
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 
          UNIQUE_REQUEST_CODE); 
       } else { 
        Toast.makeText(MainActivity.this, "Permission granted! Thank you!", Toast.LENGTH_SHORT).show(); 

       } 
       startActivity(Intent.createChooser(callIntent, "callTitle")); 

      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), "Oh no, your call has failed!", 
         Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } 
     } 
    }); 

過去2日間からのみ不在着信が表示されているように、私もそれをフィルタ処理しようとしていますしかし、それは後のためのものです。ちょうど今、欠落しているコールを通ってコールループするための良い方法が何であるか不思議です。

どのポインタも歓迎です!

ありがとうございました!

答えて

2

Phone State Listenerを使用すると、コール状態を聞くことができます。通話状態がSTATE_IDLEに戻ると、次の通話に行くことができます。

完了したら状態を停止するのを忘れないでください。

関連する問題