0

我需要有关应用程序(或服务?)的帮助,基本上我只是在胡闹,并决定看看如果我的应用程序检测到我的手机正在响铃,我是否可以让我的应用程序发送电子邮件。(我知道这看起来很愚蠢,但它对我来说更像是一个概念证明。我在我的应用程序中创建了自定义类(没有默认的主要活动)我认为它没有被执行。我设置了一个 toast 消息,当应用程序正在运行,但我从来没有看到一个出现。所以,我想我需要做一些事情来让我的类像默认的一样执行,如果是这样,我将如何去做?在 android 清单中,我添加的唯一内容是 read_phone_state 和互联网的权限(以防需要发送电子邮件)

我的问题是我需要改变什么(不需要调试它)才能让它工作?我需要在清单文件中添加额外信息吗?我是否需要更改应用程序首次启动时执行“callservice”类的设置?请,谢谢。

public class MainActivity extends Activity {


    PhoneStateListener listener;
    TelephonyManager tm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(getApplicationContext(), "Service has started", Toast.LENGTH_LONG).show();
        listener = new MyphoneStateListener();
        tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);



    }

    public class MyphoneStateListener extends PhoneStateListener
    {
        public void onCallStateChanged(int state, String incomingNumber)
        {
             switch (state) {  
                case TelephonyManager.CALL_STATE_IDLE:   
                    break;  
                case TelephonyManager.CALL_STATE_RINGING: 
                   sendemail(); 
                    break;  
                case TelephonyManager.CALL_STATE_OFFHOOK:  
                default:  
                    break;  
                }  
                super.onCallStateChanged(state, incomingNumber);  
            }
        }

        private void sendemail()
        {
            Intent i = new Intent(Intent.ACTION_SEND);
            i.setType("message/rfc822");
            i.putExtra(Intent.EXTRA_EMAIL , new String[]{"random@gmail.com"});
            i.putExtra(Intent.EXTRA_SUBJECT , "phone is ringing");
            i.putExtra(Intent.EXTRA_TEXT , "email successfully sent");
            startActivity(Intent.createChooser(i, "send mail..."));
            Toast.makeText(getApplicationContext(), "Email has been sent", Toast.LENGTH_LONG).show();

                try
                {
                    startActivity(Intent.createChooser(i, "Send Email..."));
                }
                catch(android.content.ActivityNotFoundException ex)
                {

                }
        }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
4

1 回答 1

0

正如在文档onCallStateChangedint state中,第一个和第二个是 两个参数,String incomingNumber但是在您当前的代码中,您只是将单个参数传递给它意味着您没有覆盖 PhoneStateListener 的 onCallStateChanged 方法,您的代码更改为工作:

class MyPhoneStateListener extends PhoneStateListener{  

        @Override  
        public void onCallStateChanged(int state, String incomingNumber) {  
            switch (state) {  
            case TelephonyManager.CALL_STATE_IDLE:   
                break;  
            case TelephonyManager.CALL_STATE_RINGING: 
               sendemail(); 
                break;  
            case TelephonyManager.CALL_STATE_OFFHOOK:  
            default:  
                break;  
            }  
            super.onCallStateChanged(state, incomingNumber);  
        }  

    }  
于 2012-12-17T02:23:34.283 回答