2012-03-28 82 views
0

在我的項目中,我使用了報警代碼。沒有錯誤,但BroadcastReceiver類中的任何內容都未執行。我不明白故障在哪裏。 我使用Eclipse在Windows中執行此操作。我也在AndroidManifest.xml中指定了<receiver>類。在Android中接收報警

我希望執行BroadcastReceiver類中的代碼。在這種情況下,我希望接收者類中給出的文本在指定的時間顯示。 這是我的接收機類:

public class MyBroadcastReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    context.registerReceiver(null, null); 
    Toast.makeText(context, "Time is 
up!!!!.",Toast.LENGTH_LONG).show(); 
}} 

任何人都可以提出一個方法來擺脫這個問題的? 謝謝!

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.project.rappel" 
android:versionCode="1" 
android:versionName="1.0"> 
<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 
    <provider 
     android:name="ScheduleProvider" 
     android:authorities="com.project.rappel" /> 
    <activity 
     android:name=".Rappel" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action 
       android:name="android.intent.action.MAIN" /> 
      <category 
       android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".SetSchedule"></activity> 
    <activity 
     android:name=".DaysAndTimes"></activity> 
    <activity 
     android:name=".Tts"></activity> 

    <receiver 
     android:name="MyBroadcastReceiver" 
     android:process=":remote" /> 
    </application> 
    <uses-sdk 
    android:minSdkVersion="8" /> 

    </manifest> 

以上就是我androidmanifest.xml.This是我用trigerring接收器的編碼。

public void startAlert(View view) { 
    EditText text = (EditText) findViewById(R.id.time); 
    int i = Integer.parseInt(text.getText().toString()); 
    Intent intent = new Intent(this, MyBroadcastReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
      this.getApplicationContext(), 234324243, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
      + (i * 1000), pendingIntent); 
    Toast.makeText(this, "Alarm set in " + i + " seconds", 
      Toast.LENGTH_LONG).show(); 
} 
+0

請顯示AndroidManifest.xml – ccheneson 2012-03-28 16:20:07

+1

您可能想要發佈您認爲應該觸發接收器的代碼。 – 2012-03-28 16:20:54

+0

我已經在我的文章中包含了我的androidmanifest和用於觸發報警的代碼... – Kiruthika 2012-03-28 17:25:05

回答

2

只看這段代碼就不容易回答。 但是,您可能尚未在清單中爲接收方指定意圖過濾器。

<receiver android:name=".MyBroadcastReceiver"> 
<intent-filter> 
     <action android:name="xyz.abc.YOUR_ACTION" /> 
</intent-filter> 
</receiver> 

正在使用該警報的活動或服務時,從「時間到了」必須發送一個Intent匹配在Android清單中指定的動作。你必須這樣做:

Intent MyIntent = new Intent("xyz.abc.YOUR_ACTION"); 
Context cont = this.getBaseContext(); 
cont.sendBroadcast(SMSIntent); 

希望這會有所幫助。

乾杯

+0

感謝您的回覆!我已經在我的post中包含了觸發報警的清單文件和代碼。我使用了 .But我應該在哪裏包含第二個代碼片段,你已經發布?Im new to android.Pls help me out ... – Kiruthika 2012-03-28 17:31:49

+0

@Kiruthika:在你的'startAlert'中,用'Intent替換'Intent intent = new Intent(this,MyBroadcastReceiver.class)'' intent = new Intent(「xyz.abc.YOUR_ACTION」);' – ccheneson 2012-03-28 21:36:56

+0

@ccheneson:好的,我明白了。謝謝! – Kiruthika 2012-03-30 16:24:51

0

我認爲問題出現在清單文件中。

嘗試從您的接收器中刪除此參數「android:process =」:remote「」。

編輯: 請看,我的代碼波紋管它的工作是完美的。希望,這將有所幫助。

// registration 
Intent intent = new Intent(context, AlarmReceiver.class).putExtra(AlarmReceiver.ALARM_ID, alarm.getId()); 
intent.setData(Uri.parse("date:" + alarm.getId())); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // try to change last parameter like mine 
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTime().getTime(), pendingIntent); 

// in manifest in application tag 
<receiver android:name=".ui.more.AlarmReceiver"/> 
// receiver class 
public class AlarmReceiver extends BroadcastReceiver { 
    public static final String ALARM_ID = "alarmId"; 
    public void onReceive(Context context, Intent intent) { 
    context.startActivity(new Intent(context, StartAlarmActivity.class) 
       .putExtra(StartAlarmActivity.ALARM_ID, intent.getExtras().getInt(ALARM_ID)) 
       .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 
    } 
} 
+0

謝謝!我試過了,但不工作... – Kiruthika 2012-03-28 18:45:55

+0

:非常感謝你!它工作正常... – Kiruthika 2012-03-30 16:28:44

0

首先嚐試在MyBroadcastReceiver前的清單文件中添加一個句點。它應該看起來像:android:name =「。MyBroadcastReceiver」。

如果這不起作用(儘管希望它可以)嘗試添加「上下文」。在這條線ALARM_SERVICE前:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

所以它看起來像:

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

否則,我沒有看到任何東西顯而易見。

+0

雅這就對了!這是我犯的一個錯誤..感謝您發現它... – Kiruthika 2012-03-30 16:26:33

0

此代碼工作正常:

public void setupAlarm() { 
    AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, MyAlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, 
      intent, 0); 
    Calendar time = Calendar.getInstance(); 
    time.setTimeInMillis(System.currentTimeMillis()); 
    // Set Alarm for next 10 seconds 
    time.add(Calendar.SECOND, 10); 
    alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), 
      pendingIntent); 
} 

,並在androidmanifest。xml我使用此代碼:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <receiver android:name=".MyAlarmReceiver" /> 

    <activity 
     android:name=".AlarmSampleActivity" 
     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> 

謝謝大家的幫助!