0

ユーザーの介入なしで SMS を送信したいので、BroadcastReceiverこの問題を解決するために a を作成しました。これは、起動時に通知BroadcastReceiverを受け取ります。関数では、SMS を送信できます (起動の 5 分後) "BOOT_COMPLETED"OnReceiveこのロジックを試しましたが、うまくいきません。

このサイトの他の投稿から、Android 3.1 以降では、この種のロジックを使用してこの要件を満たすことができないことがわかりました。しかし、私はこのロジックを Android 2.3 で試しましたが、そこでも機能していないようです。

Android 2.3 および Android 4.0 以降のバージョンでこの問題を解決する方法を教えてください。この要件の UI を作成したくありません。

次のコードを試しています。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.CountDownTimer;
import android.telephony.SmsManager;
import android.util.Log;

class MyCountDownTimer extends CountDownTimer {
private int no_of_attempts;
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
no_of_attempts = 0;
}

@Override
public void onFinish() {
    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage("+9198104084753", null, "Test Message ", null, null);
      } catch (Exception e) {
        Log.d("BGSMS","SMS Sending failed..Try to resend SMS");
        no_of_attempts++;
        if (no_of_attempts <= 3)
        {
            long startTime = 5 * 1000;
            long interval = 1 * 1000;
            CountDownTimer countDownTimer;
            countDownTimer = new MyCountDownTimer(startTime, interval);
            countDownTimer.start();
        }
      }

}

@Override
public void onTick(long millisUntilFinished) {

}
}

public class SalestrackerReceiver extends BroadcastReceiver {
    private CountDownTimer countDownTimer;
    private final long startTime = 5 * 1000;
    private final long interval = 1 * 1000;
  @Override
  public void onReceive(Context context, Intent intent) {
      Log.v("Anshul","Anshul Broadcast receiver received");
        countDownTimer = new MyCountDownTimer(startTime, interval);
        countDownTimer.start();
}
}

Manifest File :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sales_tracker"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.SEND_SMS" />

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="10" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <receiver android:name="SalestrackerReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>
4

4 に答える 4

0

5 分後に SMS を送信するサービスを 1 つ作成する必要があります。

Broadcastreceiver でサービスを呼び出します。

          public class MyReceiver extends BroadcastReceiver {

         public void onReceive(Context context, Intent intent) {

              TimerTask hourlyTask = new TimerTask () {
        @Override
             public void run () {
              Intent myIntent = new Intent(context,MyService.class); 
             startService(myIntent);
                }
               };

    // schedule the task to run starting now and then every hour...
         timer.schedule (hourlyTask,5000 * 60 * 1);
       }


    }
   }

myservice クラスでは、Onstart() メソッドで SMS を送信するコードを記述します。

于 2013-09-23T10:59:05.497 に答える
0

(BOOT_COMPLETED) BroadcastReceiver の onReceive メソッドからサービスを開始する必要があります。

ここを参照してください:

http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html#startingservices_alarmmanager

また、次の点に注意してください。

アプリケーションが SD カードにインストールされている場合、android.intent.action.BOOT_COMPLETED イベントの後は使用できません。この場合、android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE イベントに登録してください。

また、Android 3.0 以降では、アプリケーションが android.intent.action.BOOT_COMPLETED イベントを受け取る前に、ユーザーがアプリケーションを少なくとも 1 回起動する必要があることに注意してください。

于 2013-09-23T10:59:58.960 に答える