接收文本,拨打电话并无限期地在后台运行

时间:2017-10-19 12:48:11

标签: android

情况:我的公寓楼有一个封闭的停车场,有一个门,在打电话给一个特定号码时打开(只有一些号码可以打开大门,包括我的)。

我的要求:我正在尝试创建一个应用程序(用于我自己的手机),该应用程序将读取带有特定关键字的传入SMS,然后调用该号码打开门。此外,这个应用程序应该工作,而不是在前台(通过在后台运行或可能是intent-filters?)。

是否可能,我如何实现这一目标?

我目前的解决方案"在下面提供,但它不起作用(请记住,我是一个完整的初学者)。

主要活动:

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SmsListener listener = new SmsListener();
    String msgBody = listener.getMsgBody();

    if (msgBody.contains("keyword")) {

        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("number"));

        startActivity(callIntent);

    }

}

}

SmsListener类:

public class SmsListener extends BroadcastReceiver{

private SharedPreferences preferences;
String msgBody = "";

public String getMsgBody(){

    return msgBody;

}

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

    if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
        Bundle bundle = intent.getExtras();           //---get the SMS message passed in---
        SmsMessage[] msgs = null;
        String msg_from;
        if (bundle != null){
            //---retrieve the SMS message received---
            try{
                Object[] pdus = (Object[]) bundle.get("pdus");
                msgs = new SmsMessage[pdus.length];
                for(int i=0; i<msgs.length; i++){
                    msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                    msg_from = msgs[i].getOriginatingAddress();
                    msgBody = msgs[i].getMessageBody();

                    Toast.makeText(context, msgBody, Toast.LENGTH_LONG).show();
                }
            }catch(Exception e){
//                            Log.d("Exception caught",e.getMessage());
            }
        }
    }
}

}

我不知道上述代码是否至少部分正确,我们将不胜感激任何帮助。

当我从另一部手机发送文字时,我写的吐司没有出现,这意味着代码甚至可能无法运行。

我的manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.BROADCAST_SMS" /> // Error saying that only system apps can use this permission

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <receiver android:name=".SmsListener">
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

0 个答案:

没有答案