Использование намерения для отправки SMS по нажатию кнопки из виджета - PullRequest
0 голосов
/ 09 августа 2011

Хорошо, это код для моего виджета. У меня есть две кнопки, которые звонят при нажатии на них. Я хочу реализовать еще три кнопки для отправки SMS, но я не могу реализовать намерение для этого ... В моем основном приложении я использую функцию smsmanager ....

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.RemoteViews;

public class HelloWidget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {

        //Timer timer = new Timer();
        //timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000);
        String encodedHash = Uri.encode("#");

        for (int appWidgetId : appWidgetIds) {

            Intent callIntent1  = new Intent("android.intent.action.CALL",
            Uri.parse("tel:*100" + encodedHash));
            Intent callIntent2  = new Intent("android.intent.action.CALL",
                Uri.parse("tel:*200*1" + encodedHash));

            PendingIntent pendingIntent1 = 
                PendingIntent.getActivity(context, 0, callIntent1, 0);

            PendingIntent pendingIntent2 = 
                PendingIntent.getActivity(context, 0, callIntent2, 0);

            // Get the layout for the App Widget and attach an on-click listener to the button
            RemoteViews views1 = new RemoteViews(context.getPackageName(), R.layout.widget);
            views1.setOnClickPendingIntent(R.id.button1, pendingIntent1);

            RemoteViews views2 = new RemoteViews(context.getPackageName(), R.layout.widget);
            views2.setOnClickPendingIntent(R.id.button2, pendingIntent2);

            // Tell the AppWidgetManager to perform an update on the current App Widget
            appWidgetManager.updateAppWidget(appWidgetId, views1);
            appWidgetManager.updateAppWidget(appWidgetId, views2);
        }
    }
}

1 Ответ

1 голос
/ 09 августа 2011

Использовали ли вы smsmanager следующим образом:

SmsManager sm = SmsManager.getDefault();
sm.sendTextMessage(destinationAddress, null, "Hello world", null, null, null);


В дополнение к вашему коду, я бы предложил вам переопределить метод onReceive () в WidgetProvider для обработки отправки SMS. Базовая реализация может выглядеть так:

Первый в onUpdate ():

Intent intent = new Intent(context, WidgetProvider.class);
intent.setAction(ACTION_SEND_SMS);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

А потом:

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    if (intent.getAction().equals(ACTION_SEND_SMS)) {
        SmsManager sm = SmsManager.getDefault();
        sm.sendTextMessage(destinationAddress, null, "Hello world", null, null, null);
    }
} 

А в Манифесте:

<receiver android:name="com.packagename.WidgetProvider" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        <action android:name="com.packagename.ACTION_SEND_SMS"/>
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/widget_info" />
</receiver>


Надеюсь, это поможет

изм:

Сначала определите список сообщений. Есть много способов - в этом примере вы можете сохранить их в строковом массиве:

String[] messages = new String[]{"Message for button 1", "Message for button 2", "Message for button 3"};
String number = "12344444454" // recipient's mobile number

Инициализировать SmsManager:

SmsManager sm = SmsManager.getDefault();

Теперь добавьте onClick слушатель к своим кнопкам:

Button button1 = (Button)findViewById(R.id.yourbutton1);
Button button2 = (Button)findViewById(R.id.yourbutton2);
Button button3 = (Button)findViewById(R.id.yourbutton3);

button1.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //Sending message 1
        sm.sendTextMessage(number, null, messages[0], null, null, null);
    }
});

button2.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //Sending message 2
        sm.sendTextMessage(number, null, messages[1], null, null, null);
    }
});

button3.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //Sending message 3
        sm.sendTextMessage(number, null, messages[2], null, null, null);
    }
});
...