- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是定时器的代码,它在达到 0 时播放声音(定时器工作正常)。问题是即使在调用 MainActivity.java
中的 onPause()
时声音仍然存在。
我在 SimpleIntentService.java
中实现了 onDestroy()
来停止声音,但显然即使在 finish()
中也没有调用它调用 Activity
。当应用程序暂停时,我应该如何让声音停止?
这是我的 MainActivity.java
public class MainActivity extends Activity {
private BroadcastReceiver broadcastReceiver;
NumberPicker picker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
picker = (NumberPicker) findViewById(minutePicker);
Log.i("TurnToTech", "Project Name - SimpleBackgroundService");
picker.setMinValue(0);
picker.setMaxValue(20);
broadcastReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent intent) {
String text = intent.getStringExtra(SimpleIntentService.PARAM_OUT_MSG);
Toast.makeText(getApplicationContext(),
text, Toast.LENGTH_SHORT).show();
}
};
}
Intent msgIntent;
public void startTimer(View view) {
setContentView(R.layout.activity_main);
msgIntent = new Intent(this, SimpleIntentService.class);
msgIntent.putExtra(SimpleIntentService.PARAM_IN_MSG, "Alarm: ");
msgIntent.putExtra("time", picker.getValue());
startService(msgIntent);
}
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter(SimpleIntentService.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(broadcastReceiver,filter);
}
public void onPause() {
finish();
unregisterReceiver(broadcastReceiver);
super.onPause();
}
}
和 SimpleIntentService.java
public class SimpleIntentService extends IntentService {
public static final String PARAM_IN_MSG = "in_msg";
public static final String PARAM_OUT_MSG = "out_msg";
int time;
public static final String ACTION_RESP = "org.turntotech.intent.action.MESSAGE_PROCESSED";
public SimpleIntentService() {
super("SimpleIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
System.out.println("SimpleIntentService Called");
String msg = intent.getStringExtra(PARAM_IN_MSG);
int time = intent.getIntExtra("time", 0);
// Timer implementation
if (time == 0 ){
playSound();
}
while(time > 0){
SystemClock.sleep(5000); // 5 seconds
time -= 5;
String resultTxt = msg + time + " seconds remaining";
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ACTION_RESP);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putExtra(PARAM_OUT_MSG, resultTxt);
broadcastIntent.putExtra("time", time);
sendBroadcast(broadcastIntent);
if (time == 0) {
playSound();
}
}
}
Uri alert;
public void playSound(){
alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), alert);
r.play();
}
public void onDestroy() {
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), alert);
r.stop();
super.onDestroy();
}
}
最佳答案
在您的 IntentService
中,您并没有真正停止 onDestroy
函数中的相同警报。因为每次你得到它的一个新实例。
所以我想建议保留一个Ringtone
的公共(public)静态变量,以便可以从任何地方访问它。在您的 MainActivity
中声明它们。
public static Ringtone r;
public static Uri alert;
在 MainActivity
的 onCreate
函数中初始化它们。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ... Other statements
// Initialize ringtone here
initializeRingtone();
}
private void initializeRingtone() {
alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
r = RingtoneManager.getRingtone(getApplicationContext(), alert);
}
现在 MainActivity
的 onPause()
函数应该如下所示
public void onPause() {
unregisterReceiver(broadcastReceiver);
r.stop();
super.onPause();
}
如果您想在从后台恢复应用程序然后计时器用完后播放声音,您可以考虑在 MainActivity< 的
onResume
函数中执行类似的操作
public void onResume() {
super.onResume();
registerReceiver(broadcastReceiver);
initializeRingtone(); // Initialize it again.
}
IntentService
中的 playSound()
函数可能如下所示。
public void playSound(){
// Initialize the alert and ringtone again.
MainActivity.alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
MainActivity.r = RingtoneManager.getRingtone(getApplicationContext(), alert);
MainActivity.r.play();
}
public void onDestroy() {
MainActivity.r.stop();
super.onDestroy();
}
希望对您有所帮助!
关于java - onPause 调用后闹钟继续播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41554447/
在哥哥的帮助下,我制作了这个小闹钟。我昨晚尝试了它,没有使用 nonBlockingRawInput 并且工作正常,但是使用 nonBlockingRawInput 它没有工作。今天我已经试过了,但它
我创建了一个简单的闹钟通知应用程序,通过它我可以获取实时信息、设置闹钟打开或关闭以及播放单音音频。但我需要播放应以类 VOID 开头的声音。 下面是代码: 获取并启动警报通知: - (void)vie
我尝试在 Xcode 4.6.3 - http://vimeo.com/29824336 下重写以下教程 但我有一个问题,在 24:00 左右我的代码没有发出警报: -(void) scheduleL
在我的 Activity 中: Intent myIntent = new Intent(this, MyAlarmService.class); pendingIntent = PendingInt
我正在尝试制作一个可以设置多次的闹钟。这是代码 std::cout>link; std::cout<<"\n\nProccessing..."; loop3: //Ke
我构建了一个带有计时器的 Cordova 闹钟应用程序。一切正常,除了我现在想在时钟到达时通过视觉和音频警报通知用户。 我使用以下插件进行本地通知:https://github.com/katzer/
我正在编写一个应用程序,用户可以在其中配置警报/警报。在这一点上,我已经做好了一切工作。我正在使用 触发警报 Intent alarmIntent = new Intent(AlarmClock.AC
我正在尝试将后台闹钟功能添加到我正在开发的应用中。 我已经阅读了 UILocalNotification 对象及其用法,并且知道它限制为 30 秒的音频。 我正在考虑安排间隔 30 秒的多个通知(比如
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
这是一个非常简单的问题。我正在开发一个 iPhone 应用程序,其中使用自定义日历。用户可以在此应用程序中设置闹钟。用户添加到日历的事件不应在默认日历应用程序中可见,这意味着我无法使用默认日历应用程序
是否可以在我的应用程序代码中为 iPhone 的闹钟应用程序设置闹钟和闹钟描述?例如,在代码中设置一个早上 7:00 的闹钟,并带有“煮咖啡”的描述。因此,当用户退出我的程序时,如果他们进入 iPho
我必须创建一个示例应用程序,其中当我单击一个按钮时,应该打开 native 闹钟,以便用户可以使用它来设置闹钟? 最佳答案 对于默认应用程序 MobileClock.app 存在多个 url 方案。如
我的应用程序播放闹钟。在 Android 声音设置中,此声音由“铃声音量” slider 控制,而不是由“闹钟音量” slider 控制。如何更改由“闹钟音量”控制的声音? public void
我正在尝试构建一个闹钟,用户可以在其中选择闹钟必须响起的时间和工作日。为此,我使用了 setAlarmClock() ,因为即使设备进入打盹模式,警报也必须触发。 问题是,setAlarmClock(
我正在创建一个简单的时间选择器对话框,当用户设置时间时,我将该时间存储在日历实例中。 public void onTimeSet(TimePicker timePicker, int i, int
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
主要问题:如果我想在我的应用程序中为任务附加截止日期,我应该使用本地通知、警报或提醒吗?我希望他们在截止日期到来时即使应用程序未运行也能收到通知。 我找到了 this关于使用它说可以的 UILocal
我正在开发一个闹钟,它会按规定的时间间隔振动。因此,如果我选择 5 秒,应用程序将每隔 5 秒振动一次。但我需要停止、暂停和恢复应用程序。 这是我的课: public class AndroidAla
过去几天我一直在为 Android 构建自定义闹钟。到目前为止一切顺利,警报响起,我使用 HTTP 流播放一些远程声音(当然需要网络,否则,有本地声音的后备)。现在是时候将这个应用程序带到 iOS 上
有没有办法从我的应用程序访问和更新 iPhone 中的 native 闹钟设置?我需要一个根据一年中的时间变化的滑动闹钟,我想为此使用原生 iPhone 闹钟。这在 iOS SDK 中是否可行,例如,
我是一名优秀的程序员,十分优秀!