android服务类中的PhoneListener
我正在开发一个android应用程序,其中我使用服务类作为电话侦听器 在通话结束后,我需要让用户回到我的应用程序 它工作得非常好,但当我的应用程序没有关闭,我尝试从Android手机的默认拨号器呼叫时,在呼叫结束时,它会返回到我的应用程序(这不是必需的) 我怎样才能解决这个问题 这是我正在使用的服务类android服务类中的PhoneListener,android,service,Android,Service,我正在开发一个android应用程序,其中我使用服务类作为电话侦听器 在通话结束后,我需要让用户回到我的应用程序 它工作得非常好,但当我的应用程序没有关闭,我尝试从Android手机的默认拨号器呼叫时,在呼叫结束时,它会返回到我的应用程序(这不是必需的) 我怎样才能解决这个问题 这是我正在使用的服务类 PhoneStateListener phoneStateListener = new PhoneStateListener() { @Override
PhoneStateListener phoneStateListener = new PhoneStateListener()
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
if (state == TelephonyManager.CALL_STATE_RINGING)
{
}
else if(state == TelephonyManager.CALL_STATE_IDLE)
{
if(end.equalsIgnoreCase("YES"))
{
Log.e("Service","end of cal - CAL IDLE ");
Intent i = new Intent(ServiceforPhone.this, PhoneCall.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
end = "NO";
StopServ();
}
}
else if(state == TelephonyManager.CALL_STATE_OFFHOOK)
{
end = "YES";
Log.e("Service"," of HOOK ");
}
}
};
TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if(mgr != null)
{
mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
嗯。。。我认为在这种情况下你需要更复杂的逻辑。尝试在通话结束时分析当前活动-如果它们包含您的活动,则您应该跳过返回,否则请立即返回应用程序 下面是代码示例,可以在运行中找到您的活动:
PhoneStateListener phoneStateListener = new PhoneStateListener()
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
if (state == TelephonyManager.CALL_STATE_RINGING)
{
}
else if(state == TelephonyManager.CALL_STATE_IDLE)
{
if(end.equalsIgnoreCase("YES"))
{
Log.e("Service","end of cal - CAL IDLE ");
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(100);
for (RunningTaskInfo runningTaskInfo : tasks) {
String packageName = runningTaskInfo.topActivity.getPackageName();
if packageName.equals(YOUR_ACTIVITY_PACKAGE)
// found our activity, exit
return;
}
// activity not founded, start
Intent i = new Intent(ServiceforPhone.this, PhoneCall.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
end = "NO";
StopServ();
}
}
else if(state == TelephonyManager.CALL_STATE_OFFHOOK)
{
end = "YES";
Log.e("Service"," of HOOK ");
}
}
};
PhoneStateListener PhoneStateListener=new PhoneStateListener()
{
@凌驾
public void onCallStateChanged(int状态,字符串incomingNumber)
{
super.onCallStateChanged(状态、收入编号);
if(state==TelephonyManager.CALL_state_RINGING)
{
}
else if(state==TelephonyManager.CALL\u state\u IDLE)
{
如果(结束同等信号情况(“是”))
{
Log.e(“服务”,“校准结束-校准空闲”);
ActivityManager am=(ActivityManager)getSystemService(ACTIVITY_服务);
列表任务=am.getRunningTasks(100);
用于(RunningTaskInfo RunningTaskInfo:tasks){
字符串packageName=runningTaskInfo.topActivity.getPackageName();
如果packageName.equals(您的活动包)
//找到我们的活动,退出
返回;
}
//未建立活动,请启动
意图i=新意图(ServiceforPhone.this、PhoneCall.class);
i、 addFlags(意图、标志、活动、新任务);
星触觉(i);
end=“否”;
StopServ();
}
}
else if(state==TelephonyManager.CALL_state_OFFHOOK)
{
end=“是”;
Log.e(“服务”、“吊钩”);
}
}
};
还请注意,此代码需要权限:
<uses-permission android:name="android.permission.GET_TASKS"/>