我是android开发的新手。所以我需要帮助。
我想在电话状态响铃时显示活动,并在状态空闲或摘机时终止此活动。
所以我构建了一个扩展Broadcastreceiver的类。我调用myphonestatelistener类扩展了PhoneStateListener。我还创建了一个名为ringingactivity的活动。
这是我的代码(MyPhoneStateListener):
public void onCallStateChanged(int state,String incomingNumber){
switch(state)
{
case TelephonyManager.CALL_STATE_IDLE:
Log.d("DEBUG", "IDLE");
Intent killIntentidle = new Intent();
killIntentidle.setAction("RingingOver") ;
ctx.sendBroadcast(killIntentidle);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("DEBUG", "OFFHOOK");
Intent killIntent = new Intent();
killIntent.setAction("RingingOver") ;
ctx.sendBroadcast(killIntent);
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d("DEBUG", "RINGING");
Intent dialogIntent = new Intent(ctx , RingingActivity.class) ;
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(dialogIntent);
break;
}
}
在我的测试中,我从telnet调用模拟器,它在响铃时成功显示活动。当我接受或拒绝电话时,活动结束。但是当我再次调用模拟器时,无法再次重新创建活动。我无法在屏幕上看到它。我究竟做错了什么?
这是我的活动代码:
公共类RingingActivity扩展了Activity {
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.ringing_activity);
IntentFilter filter = new IntentFilter();
filter.addAction("RingingOver");
registerReceiver(receiver, filter);
//registerReceiver(receiver,filter) ;
}
public void finish() {
super.finish();
};
}
感谢您的帮助!
答案 0 :(得分:0)
我怀疑问题出在你的MyPhoneStateListener代码中。其他代码看起来像O.K。
下次你的PhoneStateListener没有活动的一些方法。你能第二次看到“RINGING”日志吗?
答案 1 :(得分:-2)
非常感谢你的答复Munish Katoch。我有一个解决方案,但不确定我是否找到了正确的解决方案。当我使用Garbage Collecter时,可以在每次调用的屏幕上看到活动。 这是我的代码:
公共类MyPhoneStateListener扩展了PhoneStateListener {
Context ctx ;
private boolean iscalling ;
MyPhoneStateListener(Context ctx)
{
this.ctx = ctx ;
}
public void onCallStateChanged(int state,String incomingNumber){
switch(state)
{
case TelephonyManager.CALL_STATE_IDLE:
Log.d("DEBUG", "IDLE");
if(iscalling == true)
{
Intent killIntentidle = new Intent();
killIntentidle.setAction("RingingOver") ;
ctx.sendBroadcast(killIntentidle);
System.gc() ;
iscalling = false ;
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("DEBUG", "OFFHOOK");
if(iscalling == true)
{
Intent killIntent = new Intent();
killIntent.setAction("RingingOver") ;
ctx.sendBroadcast(killIntent);
System.gc() ;
iscalling = false ;
}
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d("DEBUG", "RINGING");
iscalling = true ;
Intent dialogIntent = new Intent(ctx , RingingActivity.class) ;
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(dialogIntent);
System.gc() ;
break;
}
}
}