在Android上是否可以按下开始按钮发送短信,电子邮件和拨打电话?

时间:2014-01-10 10:14:53

标签: android android-intent android-hardware

在按下电话开始按钮的Android中执行以下操作在技术上是否可行。让我们说用户的手机已关闭。当用户按下开启按钮时,会发生以下情况:

  1. 发送短信
  2. 发送电子邮件
  3. 拨打电话
  4. 目前,我试图找到手机START BUTTON的 KeyCode 但无法在日志中获得任何回复。

    import android.view.KeyEvent;
    
            @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
    
    
                Log.e("KeyCode", "KeyCode:" + keyCode);
                Log.e("KeyEvent", "KeyEvent" + event);
    
                return true;
    
        }
    

    期待以精确的技术细节提供可靠的答案。感谢

7 个答案:

答案 0 :(得分:6)

在AndroidManifest.xml中注册广播接收器。当屏幕打开时,此接收器广播。这将执行您的应用程序活动是否在屏幕上。

的AndroidManifest.xml

<receiver android:name=".MyBroadCastReciever">
    <intent-filter>
        <action android:name="android.intent.action.SCREEN_ON"/>
    </intent-filter>
</receiver>

MyBroadCastReciever.java

public class MyBroadCastReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            Log.i("Check","Screen went ON");
            Toast.makeText(context, "screen ON",Toast.LENGTH_LONG).show();

            // Here you can write the logic of send SMS, Email, Make a call

        }
    }
}

<强>更新

  

拨打电话的逻辑

你可以这么做。它直接打电话。

Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number")); 
startActivity(callIntent);

并在AndroidManifest.xml中添加此权限

<uses-permission android:name="android.permission.CALL_PHONE" />
  

发送短信的逻辑

你可以这么做。这发送短信

public void sendSMS() {
    String phoneNumber = "0123456789";
    String message = "Hello World!";

    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage(phoneNumber, null, message, null, null);
}

并在AndroidManifest.xml中添加此权限

<uses-permission android:name="android.permission.SEND_SMS" />
  

发送电子邮件的逻辑

如果您想在此处发送电子邮件而无需在id上进行任何用户交互,则可以设计PHP Web服务并在Android应用程序中调用Web服务。

如果您要从配置的电子邮件中发送邮件,则可以使用Intent

Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremail@yahoo.com"});          
email.putExtra(Intent.EXTRA_SUBJECT, "subject");
email.putExtra(Intent.EXTRA_TEXT, "message");
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));

注意:如果要在Activity中执行此操作,请在活动中注册广播接收器,并在活动销毁时取消注册。

答案 1 :(得分:3)

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
     {
    if (keyCode == KeyEvent.KEYCODE_BACK)
          {


     // do watever you want here

    }

    return super.onKeyDown(keyCode, event);
}

答案 2 :(得分:1)

你在说

  

让我们说用户的手机已关闭。

所以我认为手机已完全关闭,你想在开机时做这些事情。我会创建一个接收器StartMyServiceAtBootReceiver。

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
            //Do whatever you want to do on boot.
        }
    }
}

并把它放在你的小生命中

    receiver
        android:name="yourpackage.StartMyServiceAtBootReceiver"
        android:enabled="true"
        android:exported="true"
        android:label="StartMyServiceAtBootReceiver" >
        <intent-filter android:priority="999" >
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

答案 3 :(得分:1)

您永远无法在应用程序中获得StartButton个事件

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
}

因为android系统不会为我们发送此事件。但如果你的意图是在完成手机启动时做一些任务,你必须听取<action android:name="android.intent.action.BOOT_COMPLETED" /> Broadcast&amp;注册必须通过AndroidManifest.xml完成。

答案 4 :(得分:0)

这两个帖子提供了您需要的所有信息:

Listen to volume buttons in background service?

Detect on/off Key Press Android

基本上,您的应用程序需要运行才能检测关键事件。

KeyEvent.KEYCODE_POWER是开/关按钮的键

答案 5 :(得分:0)

我认为你可以这样做

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

        super.onKeyDown(keyCode, event);

        if (keyCode == KeyEvent.KEYCODE_POWER) {
              // Your code here
              return true;
        }

        return false;
    }

也请访问http://developer.android.com/reference/android/view/KeyEvent.html

答案 6 :(得分:0)

请看Dave Webb的答案:Broadcast reciever on shutdown

他写道:

您可以使用手机即将关机时广播的ACTION_SHUTDOWN意图。文档说:

  

应用程序通常不需要处理此问题,因为前景   活动也会暂停。

     

换句话说,如果您回复所有生命周期事件   适当的活动,除非你真的,否则没有必要使用它   想要做一些与关机相关的具体事情。

     

ACTION_SHUTDOWN Intent是在API Level 4中引入的   它只会在运行Android 1.6或更高版本的手机上发送。

您将使用BroadcastReceiver捕获广播。它看起来像这样:

public class ShutdownReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //Insert code here
    }

}

您还需要在Manifest中输入以下内容:

<receiver android:name=".ShutdownReceiver">   
    <intent-filter>
        <action android:name="android.intent.action.ACTION_SHUTDOWN" />
    </intent-filter> 
</receiver>

根据您正在做的事情,另一种选择是使用重启手机时发送的ACTION_BOOT_COMPLETED意图。

我希望它会有所帮助!