我正在尝试开发一个应用程序,如果有人在特定时间段内连续多次呼叫您,它将打开您的铃声。这是我的第一个真正的应用程序,所以我有点卡住了。
每当在内部列表中收到呼叫时,我将如何记录?这是否需要成为始终运行的服务,或者仅通过接收拨号应用程序的意图就可以在普通应用程序中工作?
如果这个问题有点含糊,我深表歉意。
我正在尝试开发一个应用程序,如果有人在特定时间段内连续多次呼叫您,它将打开您的铃声。这是我的第一个真正的应用程序,所以我有点卡住了。
每当在内部列表中收到呼叫时,我将如何记录?这是否需要成为始终运行的服务,或者仅通过接收拨号应用程序的意图就可以在普通应用程序中工作?
如果这个问题有点含糊,我深表歉意。
最好的方法是,通过在清单中声明您的广播接收器,这将导致您的 BroadcastReceiver 类上的代码在每次触发事件时执行,而无需一直在后台运行服务,让操作系统为您处理观察部分...
<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..
}
}
服务适用于长时间的任务,但它本身的操作系统非常适合监控/观察事件(如电话事件,例如来电......),尽量不要通过创建服务来重新执行操作系统工作以监控已知事件。 ..
问候
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());
}
}