1

我正在研究一個android應用程序,需要設置短信息的發送時間表。無論出於何種原因,我似乎無法獲取郵件開始發送。無法安排短信息發送Android

這是計劃類:

public class SmsAlarm extends BroadcastReceiver { 
private int hour1, minute1, hour2, minute2, frequency; 

@Override 
public void onReceive(Context context, Intent intent) { 
    SmsManager manager = SmsManager.getDefault(); 
    TelephonyManager tMgr =(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
    String phoneNumber = tMgr.getLine1Number(); 
    Calendar c = Calendar.getInstance(); 
    int currentHour = c.get(Calendar.HOUR_OF_DAY); 
    int currentMinute = c.get(Calendar.MINUTE); 
    if (currentHour >= hour1 && currentHour <= hour2 && currentMinute >= minute1 && currentMinute <= minute2) { 
     String[] messages = context.getResources().getStringArray(R.array.messages); 
     manager.sendTextMessage(phoneNumber, null, messages[(int)(Math.random() * messages.length)], null, null); 
    } 
} 

public void SetAlarm(Context context) { 
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, SmsAlarm.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * frequency, pi); //millisecond * second * minutes 
} 

public void CancelAlarm(Context context) { 
    Intent intent = new Intent(context, SmsAlarm.class); 
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(sender); 
} 

} 

我把所有的私有變量在這個類的從我的mainactivity頂部,我也創建了這個類,我可以用它來堅持報警的序列化對象每次使用。

如果我沒有使用正確的權限,我會發布我的清單文件。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.myapp" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 
<uses-permission android:name="android.permission.GET_TASKS"></uses-permission> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="16" /> 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    android:debuggable="true" > 
    <activity 
     android:name="com.example.myapp.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

</application> 

</manifest> 

任何人都可以看到爲什麼我將無法發送消息?

回答

0

看起來您錯過了在Manifest文件中註冊您的接收器,使用適當的操作字符串。如下所示。

<receiver android:name=".SmsAlarm" > 
      <intent-filter> 
       <action android:name="com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE" /> 
      </intent-filter>// can change name/action string as par ur requirement. 
    </receiver> 

,併爲您的BroadcastReceiver

你需要設置相同的動作串在你的意圖,記住動作字符串必須在清單是相同的,這裏intent.setAction(「COM不同的.java文件。 android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE「);在java中也是如此。那麼只會刺激接收器。

您的代碼可以改變,如下所示。

Intent intent = new Intent(getApplicationContext(), to_call_when_alarm_goes_off.class); 
intent.setAction("com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE");// added line 

PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(),0, intent, 0); 

AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

alarms.cancel(pIntent); 


alarms.setRepeating(
     AlarmManager.RTC_WAKEUP, 
     System.currentTimeMillis()+1000, 
     AlarmManager.INTERVAL_DAY, 
     pIntent); 
+0

所以,如果我理解你正確你說讓掛起的意圖和報警類中的全局,設置的PendingIntent從清單中的接收器操作,然後創建了一個的onReceive整個單獨的文件方法? – Sean 2013-02-10 18:26:52

+0

是的正確.... – AAnkit 2013-02-11 04:53:52