想在Android工作室收到短信接收

时间:2015-04-12 04:29:54

标签: android

我正在设计一款能够通过其内容取消祝酒的应用程序。我正在使用android studio和虚拟设备作为lolipop api 21.请帮助。

MANIFEST_fileCODE

我的代码是:

    package com.example.vaibhav;
  import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
 import android.os.Bundle;
 import android.telephony.SmsMessage;
 import android.util.Log;
 import android.widget.Toast;
public class SMSReceiver extends BroadcastReceiver  {
    SmsManager sms = SmsManager.getDefault();

    public void onReceive(Context context, Intent intent) {

       // Retrieves a map of extended data from the intent.
       final Bundle bundle = intent.getExtras();

       try {

        if (bundle != null) {

            final Object[] pdusObj = (Object[]) bundle.get("pdus");

            for (int i = 0; i < pdusObj.length; i++) {

                SmsMessage currentMessage =                                                                                    
                 SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String phoneNumber = 
                currentMessage.getDisplayOriginatingAddress();

                String senderNum = phoneNumber;
                String message = currentMessage.getDisplayMessageBody();

                // Show Alert
                int duration = Toast.LENGTH_LONG;
                Toast toast = Toast.makeText(context,
                        "senderNum: " + senderNum + ", message: " + message, 
                  duration);
                toast.show();

            } // end for loop
        } // bundle is null

         } catch (Exception e) {
             Log.e("SmsReceiver", "Exception smsReceiver" + e);
        }


      }
        }

MY Manifest。 xml文件是:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.vaibhav"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4"
        android:targetSdkVersion="21"
        />
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses- 
      permission>
    <uses-permission android:name="android.permission.read_sms"></uses-
      permission>
    <uses-permission android:name="android.permission.hardware_test"/>
    <application android:allowBackup="true" android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme">
        <receiver android:name=".SMSReceiver">
            <intent-filter>
                <action 
     android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
    </application>

    </manifest>

我在第10行遇到错误。 错误:(10,5)错误:找不到符号类SmsManager 错误:(10,22)错误:找不到符号变量SmsManager

1 个答案:

答案 0 :(得分:1)

  1. 您的清单缺少权限,请添加以下用户权限:

    机器人:名称= “android.permission.RECEIVE_SMS” 机器人:名称= “android.permission.READ_SMS”

  2. 您的Java代码链接不可用,但您可以使用以下BroadCastReceiver代码:

  3. public class IncomingSms extends BroadcastReceiver {

         // Get the object of SmsManager
    
        final SmsManager sms = SmsManager.getDefault();
    
    public void onReceive(Context context, Intent intent) {
    
        // Retrieves a map of extended data from the intent.
        final Bundle bundle = intent.getExtras();
    
        try {
    
            if (bundle != null) {
    
                final Object[] pdusObj = (Object[]) bundle.get("pdus");
    
                for (int i = 0; i < pdusObj.length; i++) {
    
                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();
    
                    String senderNum = phoneNumber;
                    String message = currentMessage.getDisplayMessageBody();
    
                   // Show Alert
                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context, 
                                 "senderNum: "+ senderNum + ", message: " + message, duration);
                    toast.show();
    
                } // end for loop
              } // bundle is null
    
        } catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" +e);
             }
    }    
    

    检查清单文件,并相应更改其收件人名称。

    编辑:

    权限区分大小写,因此在清单中将read_sms更改为READ_SMS,例如。