我需要帮助应用程序(或服务?)基本上我只是鬼混,并决定看看我是否可以让我的应用程序发送电子邮件,如果它检测到我的手机响了。 (我知道它看起来很愚蠢,但它更多的是我的概念证明。我在我的应用程序中创建了自定义类(没有默认的主要活动)我不认为它被执行..我设置了一个toast消息,当它出现时应用程序正在运行,但我从来没有看到一个显示。所以,我想我需要做一些事情让我的类执行就好像它是默认的一个,如果是这样,我将如何去做呢?在android清单中,我添加的唯一内容是read_phone_state和internet的权限(如果需要发送电子邮件)
我的问题是我需要改变什么(不需要调试它。)才能使它工作?我是否需要在清单文件中添加额外信息?我是否需要更改应用程序首次启动时执行“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;
}
}
答案 0 :(得分:0)
在doc onCallStateChanged中首先采用两个参数int state
,其次是String incomingNumber
,但在当前代码中,您只是将单个参数传递给它意味着您不会覆盖onCallStateChanged方法{ {3}}更改代码以便工作:
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);
}
}