3

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

  1. 发简讯
  2. 发送电子邮件
  3. 拨打电话

目前,我试图找到手机的START BUTTON的KeyCode,但无法在log cat中得到任何响应。

import android.view.KeyEvent;

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


            Log.e("KeyCode", "KeyCode:" + keyCode);
            Log.e("KeyEvent", "KeyEvent" + event);

            return true;

    }

期待一个具有精确技术细节的可靠答案。谢谢

4

7 回答 7

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 中执行此操作,请在 Activity 中注册广播接收器,并在 Activity 销毁时取消注册。

于 2014-01-19T20:29:53.113 回答
3
 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
     {
    if (keyCode == KeyEvent.KEYCODE_BACK)
          {


     // do watever you want here

    }

    return super.onKeyDown(keyCode, event);
}
于 2014-01-10T10:36:00.447 回答
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.
        }
    }
}

把它放在你的minifest中

    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>
于 2014-01-20T22:30:40.257 回答
1

您永远无法StartButton在应用程序的

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

因为android系统不会为我们调度这个事件。但是,如果您的目的是在完成电话启动后执行某些任务,则必须收听<action android:name="android.intent.action.BOOT_COMPLETED" /> Broadcast并注册必须通过AndroidManifest.xml.

于 2014-01-21T08:50:13.340 回答
0

这两个帖子包含您需要的所有信息:

收听后台服务中的音量按钮?

检测开/关键按Android

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

KeyEvent.KEYCODE_POWER是开/关按钮的键

于 2014-01-10T10:21:04.460 回答
0

请看 D​​ave Webb 的这个答案:关闭时的广播接收器

他写:

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

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

换句话说,如果您适当地响应 Activity 的所有生命周期事件,则无需使用它,除非您真的想做与关闭相关的特定操作。

ACTION_SHUTDOWN Intent 是在 API 级别 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 Intent,该 Intent 在手机重新启动时发送。

我希望它会有所帮助!

于 2014-01-23T06:09:52.397 回答
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

于 2014-01-10T10:22:47.960 回答