Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么设备会从活动中振动,而不是从类(文件)中振动?_Java_Android_Android Vibration - Fatal编程技术网

Java 为什么设备会从活动中振动,而不是从类(文件)中振动?

Java 为什么设备会从活动中振动,而不是从类(文件)中振动?,java,android,android-vibration,Java,Android,Android Vibration,我希望我的应用程序使用我的应用程序的自定义振动模式振动设备。我可以从MainActivity或任何活动中执行此操作,但我不知道为什么它不能在Java类(SmsReceiver.Java)中工作 我认为如果我使用…context.getApplicationContext.getSystemService(context.可控震源\u服务)它将获得MainActivity上下文,因此有点像我在MainActivity中,它会振动。但是没有。它不会从接收器类振动 如何从SmsReceiver.jav

我希望我的应用程序使用我的应用程序的自定义振动模式振动设备。我可以从MainActivity或任何活动中执行此操作,但我不知道为什么它不能在Java类(SmsReceiver.Java)中工作

我认为如果我使用
…context.getApplicationContext.getSystemService(context.可控震源\u服务)它将获得MainActivity上下文,因此有点像我在MainActivity中,它会振动。但是没有。它不会从接收器类振动

如何从SmsReceiver.java类振动手机

SmsReceiver.java:

package com.app.name.app;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(SMS_RECEIVED)) {
            Bundle bundle = intent.getExtras();

            if (bundle != null) {
                // get sms objects
                Object[] pdus = (Object[]) bundle.get("pdus");
                if (pdus.length == 0) {
                    return;
                }
                // large message might be broken into many
                SmsMessage[] messages = new SmsMessage[pdus.length];
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < pdus.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                    sb.append(messages[i].getMessageBody());
                }

                String sender = messages[0].getOriginatingAddress();
                Log.d("SNDR", sender);
                String message = sb.toString();

                // prevent any other broadcast receivers from receiving broadcast
                abortBroadcast();
                if(!message.isEmpty())
                {
                    if(message == "!")
                    {
                        Vibrator v = (Vibrator)context.getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
                        v.cancel();

                        long[] longs = { 0, 75, 15, 100, 15, 100, 15, 75, 15 };
                        v.vibrate(longs, -1);
                    }
                }

                Toast.makeText(context, message, Toast.LENGTH_SHORT).show();

            }
        }
    }
}

相关问题无法解决此问题。

我认为从
广播接收器使用
可控震源
服务没有任何限制。我认为你的问题与你的
字符串
比较有关。您应该使用
String#equals()
来测试
String
是否相等,而不是
=

if(message.equals("!"))

我认为使用
广播接收器的
可控震源
服务没有任何限制。我认为你的问题与你的
字符串
比较有关。您应该使用
String#equals()
来测试
String
是否相等,而不是
=

if(message.equals("!"))

我认为使用
广播接收器的
可控震源
服务没有任何限制。我认为你的问题与你的
字符串
比较有关。您应该使用
String#equals()
来测试
String
是否相等,而不是
=

if(message.equals("!"))

我认为使用
广播接收器的
可控震源
服务没有任何限制。我认为你的问题与你的
字符串
比较有关。您应该使用
String#equals()
来测试
String
是否相等,而不是
=

if(message.equals("!"))

是的,我没有提到,因为我认为这是正常的方式。所以当这不起作用时,我试着用我的问题中所示的方法。是的,我没有提到这一点,因为我认为这是正常的方法。所以当这不起作用时,我试着用我的问题中所示的方法。是的,我没有提到这一点,因为我认为这是正常的方法。所以当这不起作用时,我试着用我的问题中所示的方法。是的,我没有提到这一点,因为我认为这是正常的方法。所以,当这不起作用时,我尝试了我问题中所示的方法。