-2

我是android开发的新手。所以我需要帮助。

我想在电话状态响铃时显示一个活动,并在状态空闲或摘机时终止此活动。

所以我建立了一个类扩展广播接收器。我称 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();        
};

}

谢谢你的帮助!

4

3 回答 3

0

我怀疑问题出在您的 MyPhoneStateListener 代码中。其他代码对我来说看起来不错。

一些你的 PhoneStateListener 下一次不活着的方式。您是否能够第二次看到“RINGING”日志?

于 2013-01-02T22:38:12.397 回答
-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;
    }
}   

}

于 2013-01-03T20:09:49.310 回答
-2

我不确定您为什么需要调用垃圾收集器。请尝试解决根本原因,因为没有创建活动;有时。首先通过将日志放入 MyPhoneStateListener 和 RingingActivity 来分析问题。在 MyPhoneStateListener 中,在执行任何操作(启动/终止活动)之前打印 RingingActivity 活动的状态。

于 2013-01-03T22:21:59.237 回答