如何在后台更改铃声模式(振动或静音) [英] how to change ringer mode in background(Vibrate or Silent)

查看:217
本文介绍了如何在后台更改铃声模式(振动或静音)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个程序,用户可以在其中设置时间,以将振铃器模式更改为在后台振动或正常运行。当我设置开始时间后,它开始工作,但是在结束时,它没有改变,并且设备继续振动模式。我只想要
,在开始时电话会振动,在结束时电话会回到静音模式。



MainActivity。 java

 公共类MainActivity扩展了Activity {

private PendingIntentendingIntent;
私人AlarmManager AlarmManager;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

alarmManager =(AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
Calendar calendar1 = Calendar.getInstance();


calendar.set(Calendar.HOUR_OF_DAY,4);
calendar.set(Calendar.MINUTE,37);
calendar.set(Calendar.AM_PM,Calendar.AM);

Intent myIntent = new Intent(MainActivity.this,MyReceiver.class);
endingIntent = PendingIntent.getBroadcast(MainActivity.this,(int)System.currentTimeMillis(),myIntent,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),endingIntent);

calendar.set(Calendar.HOUR_OF_DAY,4);
calendar1.set(Calendar.MINUTE,38);
calendar1.set(Calendar.AM_PM,Calendar.AM);

Intent myIntent1 = new Intent(MainActivity.this,MyReceiver1.class);
endingIntent = PendingIntent.getBroadcast(MainActivity.this,(int)System.currentTimeMillis(),myIntent1,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar1.getTimeInMillis(),endingIntent);
}}

这是与BroadcastReceiver相关的类。



MyReceiver.java

 公共类MyReceiver扩展了BroadcastReceiver {

@Override
public void onReceive(Context arg0,Intent intent){
// TODO自动生成的方法存根
AudioManager audio =(AudioManager)arg0.getSystemService(Context .AUDIO_SERVICE);

开关(audio.getRingerMode()){
case AudioManager.RINGER_MODE_NORMAL:
audio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
Log.d( MODE,是正常的);
Log.d( MODE, is vibrate);
休息时间;

case AudioManager.RINGER_MODE_SILENT:
audio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
Log.d( MODE,保持沉默);
Log.d( MODE, is vibrate);
休息时间;
}
}}

MyReceiver1.java

 公共类MyReceiver1扩展了BroadcastReceiver {

@Override
public void onReceive(Context context ,Intent intent){
AudioManager audio =(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
// TODO自动生成的方法存根
switch(audio.getRingerMode()){
case AudioManager.RINGER_MODE_NORMAL:
audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
Log.d( MODE,是正常的);
Log.d( MODE,是沉默的);
休息时间;
}

case AudioManager.RINGER_MODE_VIBRATE:
audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
Log.d( MODE,被振动);
Log.d( MODE,是沉默的);
休息时间;
}
}}

我宣布

 < receiver android:name =。MyReceiver> 
<意图过滤器>
< action android:name = android.media.RINGER_MODE_CHANGED />
< / intent-filter>
< / receiver>

< receiver android:name =。MyReceiver1>
<意图过滤器>
< action android:name = android.media.RINGER_MODE_CHANGED />
< / intent-filter>
< / receiver>

在我的清单文件中。



请帮我解决这个问题。
谢谢。

解决方案

不要同时使用接收器(MyReceiver和Myreceiver1)使用单个MyReceiver。



< pre class = snippet-code-js lang-js prettyprint-override> < receiver android:name =。MyReceiver> <意图过滤器> < action android:name = android.media.RINGER_MODE_CHANGED /> < / intent-filter> < / receiver>


I'm trying to write a program in which user can set time that will change ringer mode to vibrate or normal in background. When I set the start time it's working but at the end time it's not changing and device continuing vibrate mode. I just want, at the start time phone would be in vibrate and at end time phone would go back into the silent mode.

MainActivity.java

public class MainActivity extends Activity {

private PendingIntent pendingIntent;
private AlarmManager alarmManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    Calendar calendar1 = Calendar.getInstance();


    calendar.set(Calendar.HOUR_OF_DAY, 4);
    calendar.set(Calendar.MINUTE, 37);
    calendar.set(Calendar.AM_PM,Calendar.AM);

    Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(MainActivity.this, (int)System.currentTimeMillis(), myIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

    calendar1.set(Calendar.HOUR_OF_DAY, 4);
    calendar1.set(Calendar.MINUTE, 38);
    calendar1.set(Calendar.AM_PM,Calendar.AM);

    Intent myIntent1 = new Intent(MainActivity.this, MyReceiver1.class);
    pendingIntent = PendingIntent.getBroadcast(MainActivity.this, (int)System.currentTimeMillis(), myIntent1,PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(), pendingIntent);
}}

and these are related BroadcastReceiver class..

MyReceiver.java

public class MyReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context arg0, Intent intent) {
    // TODO Auto-generated method stub
    AudioManager audio = (AudioManager)arg0.getSystemService(Context.AUDIO_SERVICE);

    switch(audio.getRingerMode()){
    case AudioManager.RINGER_MODE_NORMAL :
        audio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
        Log.d("MODE", "was normal");
        Log.d("MODE", "is vibrate");
        break;

    case AudioManager.RINGER_MODE_SILENT :
        audio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
        Log.d("MODE", "was silent");
        Log.d("MODE", "is vibrate");
        break;
    }
}}

MyReceiver1.java

public class MyReceiver1 extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    AudioManager audio=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
    // TODO Auto-generated method stub
    switch(audio.getRingerMode()){
    case AudioManager.RINGER_MODE_NORMAL :
        audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
        Log.d("MODE", "was normal");
        Log.d("MODE", "is silent");
        break;
    }

    case AudioManager.RINGER_MODE_VIBRATE :
        audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
        Log.d("MODE", "was vibrate");
        Log.d("MODE", "is silent");
        break;
    }
}}

and I declared

    <receiver android:name=".MyReceiver">  
        <intent-filter>  
            <action android:name="android.media.RINGER_MODE_CHANGED" /> 
        </intent-filter>  
    </receiver>

    <receiver android:name=".MyReceiver1">  
        <intent-filter>  
            <action android:name="android.media.RINGER_MODE_CHANGED" /> 
        </intent-filter>  
    </receiver>

in my manifest file.

Please help me to solve this issue. Thanks.

解决方案

Dont't use both the receiver (MyReceiver and Myreceiver1) use single MyReceiver.

<receiver android:name=".MyReceiver">  
        <intent-filter>  
            <action android:name="android.media.RINGER_MODE_CHANGED" /> 
        </intent-filter>  
    </receiver>

这篇关于如何在后台更改铃声模式(振动或静音)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆