按两次电源键发送短信。

3

我写了一个应用程序,用户可以在活动中按下按钮发送消息,对我来说这很好用,但现在我的目标是通过双击电源按钮发送短信。

但是我不知道怎么做?

   Send SMS by using double press on power button

以下是我用来发送短信的代码:
 btnPanic.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String message = "My current location is:" + "\t" + currentLocation ;

            String phoneNo = editContacts.getText().toString();

            StringTokenizer st=new StringTokenizer(phoneNo,",");
            while (st.hasMoreElements())
            {
                String tempMobileNumber = (String)st.nextElement();
                if(tempMobileNumber.length()>0 && message.trim().length()>0) {
                    sendSMS(tempMobileNumber, message);
            }
            else 
            {
              Toast.makeText(getBaseContext(), 
                "Please enter both phone number and message.", 
                 Toast.LENGTH_SHORT).show();
            }
        }
    }
});

重复的http://stackoverflow.com/questions/21448564/twice-power-button-press-sends-sms - Alex van den Hoogen
4
@AlexvandenHoogen那并不是解决方案。 - Sun
1
我不喜欢在编写移动应用时使用电源按钮作为事件触发器。在电脑上也不会看到这种情况... - KarelG
不是,但这是一个重复的问题。然而,这可能是一个解决方案:https://dev59.com/TXA65IYBdhLWcg3wqQY8 - 不过KarelG是正确的。这对于应用程序来说是意外的行为,肯定不推荐这样做。 - Alex van den Hoogen
2
你不能说这是重复的,因为那个问题是由其他人提出的,并且也没有解决方案。@AlexvandenHoogen我认为你应该理解这一点。 - Sun
显示剩余3条评论
3个回答

4

我可以给您提供如何实现这个功能的想法,但它是硬编码的。

如果我说错了,请原谅。!!

这是将键盘事件转换为双击事件的一种方式。

因此,在这里,我认为按键两次相当于双击

首先查看电源按钮的键盘事件。

1

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(KeyEvent.KEYCODE_POWER == event.getKeyCode()){
      if(time interval is less)//Consider as double click
       //code to send messages
        else            //Consider as single click
       //nothing to do   
    }
    return super.onKeyDown(keyCode, event);
}

2. 你应该使用System.currentTimeMillis()来查找可以验证双击的两次点击时间。

尝试双击并记录时间,多次进行以获得精确的时间。

简而言之,您需要首先找出两次点击之间允许的最大时间,这被认为是双击。

这样我们就可以区分单击和双击。

3. 因此,在按键事件中,您需要执行以下操作。

long l=0;//at start not in key event handler

if(l=0){l=System.currentTimeMillis();}//clicked first time
else{l=System.currentTimeMillis()-l;}//second time

你已经完成了使用这些长值来确定是单击还是双击


1
    public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
    // do what you want with the power button

        String message = "My current location is:" + "\t" + currentLocation ;

        String phoneNo = editContacts.getText().toString();

        StringTokenizer st=new StringTokenizer(phoneNo,",");
        while (st.hasMoreElements())
        {
            String tempMobileNumber = (String)st.nextElement();
            if(tempMobileNumber.length()>0 && message.trim().length()>0) {
                sendSMS(tempMobileNumber, message);
        }
        else 
        {
          Toast.makeText(getBaseContext(), 
            "Please enter both phone number and message.", 
             Toast.LENGTH_SHORT).show();
        }
    return true;
}
return super.onKeyDown(keyCode, event);

}


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接