0

アプリのカスタム振動パターンを使用して、アプリでデバイスを振動させたいです。これは、MainActivity または任意のアクティビティから実行できますが、Java クラス (SmsReceiver.java) 内から実行できない理由がわかりません。

使用...context.getApplicationContext.getSystemService(Context.VIBRATOR_SERVICE);すると MainActivity コンテキストが取得されるため、MainActivity にいるようなものになり、振動すると思いました。しかし、いいえ。Receiver クラスからは振動しません。

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();

            }
        }
    }
}

MainActivity.java、onButtonClick:

switch(id)
{
    case R.id.action_search:
        Vibrator v = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);

        long[] longs = { 0, 75, 15, 100, 15, 100, 15, 75, 15 };
        v.vibrate(longs, -1);
        break;
    case R.id.action_settings:
        break;
}

この関連する質問は、この問題を解決しません。

4

1 に答える 1

3

Vibratorからのサービスの使用に制限があるとは思いませんBroadcastReceiver。あなたの問題はあなたのString比較に関係していると思います。ではなく、等しいかどうかをString#equals()テストするために使用する必要があります。String==

if(message.equals("!"))
于 2015-01-15T07:22:11.263 に答える