gpt4 book ai didi

android - 选择性静音模式

转载 作者:行者123 更新时间:2023-11-29 01:56:17 24 4
gpt4 key购买 nike

我开发了一个应用程序,即使手机处于静音模式,它也会有选择地响起某些号码。我已经编写了在广播接收器中使其响亮的代码。

广播接收器是

     AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);

switch (am.getRingerMode()) {
case AudioManager.RINGER_MODE_SILENT:
Log.i("MyApp","Silent mode");
profileStatus = 1;
break;
case AudioManager.RINGER_MODE_VIBRATE:
Log.i("MyApp","Vibrate mode");
break;
case AudioManager.RINGER_MODE_NORMAL:
Log.i("MyApp","Normal mode");
profileStatus= 2;
break;
}
System.out.println("The Profile Status"+profileStatus);
System.out.println("The Old Profile Status"+oldProfileStatus);
System.out.println("The Count = "+count );

if(profileStatus==1)
{
System.out.println("ProfileStatus"+profileStatus);

OpenHelper db = new OpenHelper(context);
//Getting Data From The DataBase

CONTACT_DATA = db.Contact_Records();

if (CONTACT_DATA.size() > 0)
{
//Log.e("ARRAY", "not null");

for(int i =0;i<CONTACT_DATA.size();i++)
{
HashMap<String, String> map = CONTACT_DATA.get(i);
phone_number = map.get("phone_number");
}
}


Bundle bundle = intent.getExtras();
final AudioManager mobilemode = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
if(null == bundle)
return;

Log.i("IncomingCallReceiver",bundle.toString());

String state = bundle.getString(TelephonyManager.EXTRA_STATE);

Log.i("IncomingCallReceiver","State: "+ state);
if(state.equals("IDLE"))
{

System.out.println("THE STATE IS IDLE");
mobilemode.setRingerMode(AudioManager.RINGER_MODE_SILENT);

}



if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
{
String phonenumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.i("IncomingCallReceiver","Incomng Number:from receiver------------------ " + phonenumber);
String info = "Detect Calls sample application\nIncoming number: " + phonenumber;



AudioManager maudio=(AudioManager)context.getSystemService(context.AUDIO_SERVICE);

bundle = intent.getExtras();
this.context = context;

if(null == bundle)
return;


state = bundle.getString(TelephonyManager.EXTRA_STATE);

if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
{
check();
PhoneNumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);

for(int i =0;i<CONTACT_DATA.size();i++)
{
HashMap<String, String> map = CONTACT_DATA.get(i);
phone_number = map.get("phone_number");
if (PhoneNumber.equals(phone_number)) {
}
if((PhoneNumber.equals(phone_number)))
{
makeitNormal();
maudio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
oldProfileStatus = profileStatus;
System.out.println("The Profile Status==="+oldProfileStatus);
count=1;
}
}

}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK))
{
makeItSilent();
mobilemode.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}

if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE))
{
makeItSilent();
mobilemode.setRingerMode(AudioManager.RINGER_MODE_SILENT);

}

//

 }
}
else
{
System.out.println("The System Is In Normal Mode ");
count=0;
}
}
private void check() {
// TODO Auto-generated method stub
AudioManager maudio=(AudioManager)context.getSystemService(context.AUDIO_SERVICE);
ringerMode=maudio.getRingerMode();

}

private void makeitNormal() {
// TODO Auto-generated method stub

AudioManager maudio=(AudioManager)context.getSystemService(context.AUDIO_SERVICE);
maudio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}


private void makeItSilent() {
// TODO Auto-generated method stub
AudioManager maudio=(AudioManager)context.getSystemService(context.AUDIO_SERVICE);
int ringer=maudio.getRingerMode();
if (ringerMode==AudioManager.RINGER_MODE_SILENT){

maudio.setRingerMode(AudioManager.RINGER_MODE_SILENT);

}else if(ringerMode==AudioManager.RINGER_MODE_NORMAL){
maudio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
else if(ringerMode==AudioManager.RINGER_MODE_VIBRATE){
maudio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
}

}

public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}

public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
}

我面临的问题是1)安装后第一次没有响铃。安装后完美运行2)在HTC手机上不行,在三星手机上可以用

最佳答案

您的 BroadcastReceiver 做的太多了。它的生命周期与它的 onReceive() 方法一样长,因此您无法获得放入其中的所有功能。尝试将您的音量操作代码移动到一个服务中,并使用 BroadcastReceiver 作为一个简单的代理来通知服务何时有来电。您通常应该避免在 BroadcastReceiver 的上下文中进行繁重的操作。

此外,仅调用 setRingerMode(AudioManager.RINGER_MODE_NORMAL) 并不总是足以取消铃声静音。您还需要调用 setStreamMute(AudioManager.STREAM_RING, false) 和 setStreamVolume(AudioManager.STREAM_RING, someAudibleVolume, 0)。在许多设备上,铃声模式可以是“正常”,而铃声音量是“0”。

顺便说一句,我写了一个与您描述的非常相似的应用程序,祝您好运 :)。当您尝试始终如一地操纵铃声音量时,您会看到 Android 设备生态系统中一些最严重的 fragment 。例如在 Samsung Galaxy Nexus 上,您可以在来电开始后轻松覆盖和操纵音量。然而,在 Galaxy S3 上,当有来电时,铃声音量会忽略更改它的尝试,并且需要一些聪明的(读作“hackish”)解决方法。

关于android - 选择性静音模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14976257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com