在Android开发中杀死并重新创建服务中的活动

时间:2013-01-02 21:08:16

标签: android android-activity

我是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();        
};

}

感谢您的帮助!

2 个答案:

答案 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;
    }
}   

}