我是新的Android和试图研发应用程序快速帮助。一旦用户双击电源按钮,我希望我的应用程序为两种情况直接呼叫救护车(屏幕打开/关闭)。我已经写了这段代码,但它不起作用。任何帮助将不胜感激。提前谢谢你。:)
Android显示
<receiver android:name=".MyReceiver" android:exported="true" android:enabled="true">
<intent-filter android:priority="999">
<action android:name="android.intent.action.SCREEN_OFF" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
<service android:name=".MyCallService" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</service>
我的电话服务。JAVA
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
public class MyCallService extends Service {
public MyCallService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_USER_PRESENT);
final BroadcastReceiver mReceiver = new MyReceiver();
registerReceiver(mReceiver, filter);
return super.onStartCommand(intent, flags, startId);
}
}
MyReceiver.java
import android.Manifest;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.widget.Toast;
/**
* Created by Kinjal on 2/18/2018.
*/
public class MyReceiver extends BroadcastReceiver {
static int countPowerOff=0;
public static boolean wasScreenOn = true;
private static final int code=1;
@Override
public void onReceive(Context context, Intent intent){
Log.v("onReceive","Power button is pressed");
Toast.makeText(context,"power button clicked",Toast.LENGTH_SHORT).show();
if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){
countPowerOff++;
Toast.makeText(context,"Screen off",Toast.LENGTH_SHORT).show();
if(countPowerOff==2){
if(ContextCompat.checkSelfPermission(context,android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) context, new String[] {Manifest.permission.CALL_PHONE},code);
}
else{
context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "108")));
}
}
else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
countPowerOff++;
Toast.makeText(context,"Screen on",Toast.LENGTH_SHORT).show();
if(countPowerOff==2){
if(ContextCompat.checkSelfPermission(context,android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) context, new String[] {Manifest.permission.CALL_PHONE},code);
}
else{
context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "108")));
}
}
}
else if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)){
Log.e("LOB","userpresent");
Log.e("LOB","wasScreenOn"+wasScreenOn);
}
}
}
}
主要活动。JAVA
startService(new Intent(getApplicationContext(), MyCallService.class)); //a call to start Service
或者你可以试试这个
static int i=0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
i++;
if(i==2){
//do something
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number"));
startActivity(intent);
i = 0;
}
}
return super.onKeyDown(keyCode, event);
}
你只需要检测屏幕何时关闭和何时打开,计算它们之间的时间差,如果少于4秒(在我的情况下),请拨打电话,否则不要
@Override
public void onReceive(final Context context, final Intent intent) {
cntx = context;
Log.v("onReceive", "Power button is pressed.");
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
a = System.currentTimeMillis();
seconds_screenoff = a;
OLD_TIME = seconds_screenoff;
OFF_SCREEN = true;
new CountDownTimer(5000, 200) {
public void onTick(long millisUntilFinished) {
if (ON_SCREEN) {
if (seconds_screenon != 0 && seconds_screenoff != 0) {
actual_diff = cal_diff(seconds_screenon, seconds_screenoff);
if (actual_diff <= 4000) {
sent_msg = true;
if (sent_msg) {
Toast.makeText(cntx, "POWER BUTTON CLICKED 2 TIMES", Toast.LENGTH_LONG).show();
// Make Call
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number"));
startActivity(intent);
seconds_screenon = 0 L;
seconds_screenoff = 0 L;
sent_msg = false;
}
} else {
seconds_screenon = 0 L;
seconds_screenoff = 0 L;
}
}
}
}
public void onFinish() {
seconds_screenoff = 0 L;
}
}.start();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
a = System.currentTimeMillis();
seconds_screenon = a;
OLD_TIME = seconds_screenoff;
new CountDownTimer(5000, 200) {
public void onTick(long millisUntilFinished) {
if (OFF_SCREEN) {
if (seconds_screenon != 0 && seconds_screenoff != 0) {
actual_diff = cal_diff(seconds_screenon, seconds_screenoff);
if (actual_diff <= 4000) {
sent_msg = true;
if (sent_msg) {
Toast.makeText(cntx, "POWER BUTTON CLICKED 2 TIMES", Toast.LENGTH_LONG).show();
vibe.vibrate(100);
seconds_screenon = 0 L;
seconds_screenoff = 0 L;
sent_msg = false;
}
} else {
seconds_screenon = 0 L;
seconds_screenoff = 0 L;
}
}
}
}
public void onFinish() {
seconds_screenon = 0 L;
}
}.start();
}
}
private long cal_diff(long seconds_screenon2, long seconds_screenoff2) {
if (seconds_screenon2 >= seconds_screenoff2) {
diffrence = (seconds_screenon2) - (seconds_screenoff2);
seconds_screenon2 = 0;
seconds_screenoff2 = 0;
} else {
diffrence = (seconds_screenoff2) - (seconds_screenon2);
seconds_screenon2 = 0;
seconds_screenoff2 = 0;
}
return diffrence;
}
}
检查这篇文章:点击这里
问题内容: 我正在尝试在应用程序中实现一项功能,当互联网连接不可用时会显示警报。该警报具有两个操作(“确定”和“设置”),每当用户单击设置时,我都希望以编程方式将其设置为电话设置。 我正在使用Swift和Xcode。 问题答案: 使用 Swift 5.1更新 斯威夫特4.2
好吧,我正在做一些事情,我想禁用设备的所有硬按钮。 硬按钮,如电源、主页、调高音量、调低音量、搜索、返回。 除了Power,我已经成功地覆盖了这里的几乎所有按钮。 所以我只想让你们看到,请分享一些想法,这样我就可以不受影响了。 我在获得长按电源键事件,就像我想抓住相同的短按一样。此外,当按下电源时,我还试图通过获取的来停止屏幕关闭,我成功地接收了它,但我无法处理它。 谢谢。 然后,我创建了一个接收
问题内容: 我在这方面是一个初学者,因此我正在努力使它起作用。 当按下按钮时,我只是希望拨号器以自动输入的指定号码打开。 到目前为止,我已经尝试了以下方法: 我也尝试过: 我已将权限ACTION_CALL添加到清单中。 每当我单击“呼叫”按钮时,应用程序强制关闭。 任何帮助将不胜感激。 谢谢! 问题答案: 您需要将此权限添加到清单中。
我是开发Android应用程序的新手,我想做的是创建一个可以读取电源按钮按下时间的应用程序,以制作一个可访问性应用程序。 也许如果我能控制或计算屏幕打开和屏幕关闭事件,这可能会有所帮助。
我是Android新手。我正在尝试制作一个应用程序,它将在后台运行,并检测三次快速按下电源按钮。我查阅了很多资料,但无法澄清我的困惑。谁能给我一些建议吗?蒂亚。
问题内容: 我使用下面的代码,但没有找到解决方案。 MyReceiver.java: 和 MainActivity.java: 和 AndroidManifest.xml: 但点击时,我没有收到任何吐司消息。请帮助我了解如何获得点击次数,如果点击次数等于5,请转到另一个。请帮我实现这个吗? 问题答案: 试试这个, 和,