3
send.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    //URI uri=uri.parse("sms://+919500518057");
    sendSms("9500518057","message");
    //startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("sms:"+ "+919500518057")));
    }

    private void sendSms(String phno, String message) {
        // TODO Auto-generated method stub
        Log.v("PhoneNumber",phno);
        Log.v("MEssage", message);
        PendingIntent pi=PendingIntent.getActivity(this, 0, new Intent(this, Object.class), 0);
        SmsManager sms=SmsManager.getDefault();
        sms.sendTextMessage(phno, null, message, pi, null);
    }
});

マニフェストファイル:

<uses-permission android:name="android.permission.SEND_SMS"/>

次のようなエラーが発生しました。

型PendingIntentのメソッドgetActivity(Context、int、Intent、int)は、マニフェストファイルの引数(new View.OnClickListener(){}、int、Intent、int)には適用できません。次のコードを入力します

4

6 に答える 6

1

メインからこのメソッドを呼び出します。

private void sendSMS() {
        SMSSend smsSend = new SMSSend();

        smsSend.execCommand();
    }

次に、以下の2つのクラスがSMSの送信を担当します。

public class SMSSend {

    private final String CLASS_NAME = this.getClass().getSimpleName();
    private final static String SEND_SMS_FAILURE = "Send SMS command executed and status is failure";
    private String phoneNumber;
    private String messageText;

    /**
     * constructor is defined.
     * 
     * @param CommandProcessor
     *            cmdProcessor
     */
    public SMSSend() {
        super();
    }

    /**
     * execCommand method
     * 
     * It is an overridden here and declared in CommandHandler (base class)
     */
    public void execCommand() {
        try {
            new Thread() {
                public void run() {
                    sendSMS();
                }
            }.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    /**
     * sendSMS method
     * 
     * It retrieves the command parameters and sends the sms.
     * 
     * @param Command
     *            command
     * @return Status
     */
    private void sendSMS() {
        try {
            SMSSendHelper smsHelper = new SMSSendHelper();
            phoneNumber = "0123456789";
            messageText = "Message Text smaple";
            if (null == phoneNumber || phoneNumber.length() < 2) {
            } else {
                smsHelper.sendSMS(phoneNumber, messageText);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }

    }

}




/**
 * SMSSend class
 * 
 * It is responsible for sending SMSs.
 *  
 */
public class SMSSendHelper {
    private final String CLASS_NAME = this.getClass().getSimpleName();
    private String SENT = "SMS_SENT";
    private String DELIVERED = "SMS_DELIVERED";
    private PendingIntent sentPI;
    private BroadcastReceiver sentReceiver;
    private BroadcastReceiver deliveredReceiver;
    private PendingIntent deliveredPI;
    private static final int SMS_LENGHT = 160;
    private static String status = "";

    /**
     * Constructor is defined
     * 
     * @param Status
     *            smsstatus
     */
    public SMSSendHelper() {
        sentPI = PendingIntent.getBroadcast(ConfigClass.getAppContext(), 0,
                new Intent(SENT), 0);

        deliveredPI = PendingIntent.getBroadcast(ConfigClass.getAppContext(),
                0, new Intent(DELIVERED), 0);
        sentReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {

                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    try {
                        synchronized (lock) {
                            lock.notifyAll();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    setSendSMSSataus("SMS Sent");
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    try {
                        synchronized (lock) {
                            lock.notifyAll();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    setSendSMSSataus("Generic failure");
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    try {
                        synchronized (lock) {
                            lock.notifyAll();
                        }
                    } catch (Exception e) {
                    }
                    setSendSMSSataus("No service");
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    try {
                        synchronized (lock) {
                            lock.notifyAll();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    setSendSMSSataus("Null PDU");
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    try {
                        synchronized (lock) {
                            lock.notifyAll();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    setSendSMSSataus("Radio off");
                    break;
                default:
                    try {
                        synchronized (lock) {
                            lock.notifyAll();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;

                }
                ConfigClass.getAppContext().unregisterReceiver(sentReceiver);
            }
        };
        // ---when the SMS has been sent---
        ConfigClass.getAppContext().registerReceiver(sentReceiver,
                new IntentFilter(SENT));

        deliveredReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    break;
                case Activity.RESULT_CANCELED:
                    break;
                }
                ConfigClass.getAppContext().unregisterReceiver(
                        deliveredReceiver);
            }
        };

        ConfigClass.getAppContext().registerReceiver(deliveredReceiver,
                new IntentFilter(DELIVERED));
    }

    /**
     * setSendSMSSataus method
     * 
     * @param setSendSMSSataus
     *            currentSataus
     */
    public static void setSendSMSSataus(String currentSataus) {
        status = currentSataus;

    }

    /**
     * getSendSMSSataus method
     * 
     * @return String status
     */
    public String getSendSMSSataus() {
        int i = sentReceiver.getResultCode();
        return status;
    }

    /**
     * sendSMS method
     * 
     * @param String
     *            phoneNumber
     * @param String
     *            message
     * @return Status
     */
    public void sendSMS(String phoneNumber, String message) {
        if (message == null) {
            message = " ";
        }

        SmsManager sms = SmsManager.getDefault();

        if (message.length() > SMS_LENGHT) {
            sendLongSMS(sms, message, phoneNumber);
        } else {
            Log.d("E++++D",phoneNumber+"======>>>>>SOS");

            sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
        }
        try {
            synchronized (lock) {
                lock.wait();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private void sendLongSMS(SmsManager sms, String message, String phoneNumber) {
        ArrayList<String> parts = sms.divideMessage(message);
        int numParts = parts.size();
        ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
        ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>();
        for (int i = 0; i < numParts; i++) {
            sentIntents.add(sentPI);
            deliveryIntents.add(deliveredPI);
        }

        sms.sendMultipartTextMessage(phoneNumber, null, parts, sentIntents,
                deliveryIntents);
    }

    private Object lock = new Object();
}
于 2012-12-21T10:42:59.717 に答える
0

私はこれをメッセージの送信に使用しています:-

private void sendSMS(String phoneNumber, String message)
{        

    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, null, null);     
} 
于 2012-12-21T10:39:25.180 に答える
0

保留中のインテントには、最初のパラメーターとしてコンテキストが必要です。アクティビティ内では、を使用してアクティビティコンテキストをメソッドに渡すことができますPendingIntent.getActivity(this, ..)

ただし、これは(あなたがしたように)では機能しませんsetOnClickListener。OnclickListener内では、アクティビティ ではなく(有効なコンテキストオブジェクトではありません)をthis参照します。setOnClickListener

アクティビティをに渡したい場合は、getActivity次を使用できますPendingIntent.getActivity(<NameOfYourActivity>.this, ..)

例えばPendingIntent.getActivity(MyActivity.this, ..)

于 2012-12-21T10:39:38.103 に答える
0

間違ったを使用していthisます。これを交換してください:

PendingIntent pi=PendingIntent.getActivity(this, 0, new Intent(this, Object.class), 0);

このため:

PendingIntent pi=PendingIntent.getActivity(YourActivity.this, 0, new Intent(YourActivity.this, Object.class), 0);

現在、を使用していOnClickListener.thisます。:)

于 2012-12-21T10:38:08.810 に答える
0

使用してみてください:

PendingIntent pi=PendingIntent.getActivity(mContext, 0, new Intent(mContext, Object.class), 0);

そして、グローバル変数に以下を追加します。

private Context mContext;

そして、以下を使用してスーパーコールの後にonCreate()で初期化します。

mContext = this;

thisの作成中にのみ使用するPendingIntentことで、の現在のインスタンスを参照しているわけではありませんActivityOnClickListener内部クラスの現在のインスタンスを参照しています

于 2012-12-21T10:38:26.037 に答える
0
private void sendSMS(String phoneNumber, String message)
    {        
        PendingIntent pi = PendingIntent.getActivity(this, 0,
            new Intent(this, SMS.class), 0);                
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, pi, null);        
    }  
于 2012-12-21T10:42:19.053 に答える