2013-06-04 46 views
1

我正在嘗試開發一個應用程序,如果有人在某段時間內連續打了一定數量的電話,它會打開你的鈴聲。這是我第一個真正的應用程序,所以我有點卡住了。Android檢測來電?

如何在內部列表中收到呼叫時進行錄音?這需要成爲一種始終在運行的服務,或者只需接收撥號器應用程序的意圖就可以在普通應用程序中工作?

我很抱歉,如果這個問題有點含糊。

+0

你可以作爲一個接收器註冊,然後你可以將信息存儲在sqlite數據庫中。 – gsingh2011

回答

4

要做到這一點,最好的方法是,通過在清單中聲明廣播接收器,這將導致您的BroadcastReceiver類中的代碼在每次觸發事件時都得到執行,而無需在後臺運行服務所有的時間,讓OS爲您處理觀察部...

現在
<receiver android:name=".ReceiverExample"> 
    <intent-filter> 
    <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 

,在廣播接收器類「ReceiverExample」,創建一個SharedPreference存儲進來的呼叫的數量,並根據這一點,你可以驗證是否是時間做其他事情或不...

public class ReceiverExample extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    //Logic to listen incoming calls, and keep track of them using Shared Preferences.. 
    } 
    } 

服務適用於長時間任務,但它自身的操作系統非常適合監視/觀察事件(例如電話事件進來的電話......),儘量不要通過創建服務只是爲了監控已知事件重新做的OS工作...

問候

+0

+1爲簡單起見 –

0
use single Tone Class for recording 


public class Recording { 

    private static MediaRecorder recorder; 
    private File audiofile; 

    private static Recording mInstance; 

    public MediaRecorder getRecorder() { 
     System.out.println("From singleton..!!!"); 
     return recorder; 
    } 

    public static Recording getInstance(Context context) { 
     return mInstance == null ? (mInstance = new Recording(context)) 
       : mInstance; 
    } 

    private Recording(Context context) { 
     System.out.println("Again initiated object"); 
     File sampleDir = Environment.getExternalStorageDirectory(); 
     try { 
      audiofile = File.createTempFile("" + new Date().getTime(), ".amr", 
        sampleDir); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return; 
     } 

     recorder = new MediaRecorder(); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setOutputFile(audiofile.getAbsolutePath()); 
    } 
}