2012-03-28 11 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は、私はReceiverを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

+1

あなたは、受信機を起動する必要があると思われるコードを投稿したいと思うかもしれません。 –

+0

私のアンドロイドマニフェストと私のポストにアラームをトリガするためのコードが含まれています... – Kiruthika

答えて

2

この部分だけを見ると、簡単には答えられません。 ただし、マニフェストの受信者にインテントフィルタを指定していない可能性があります。

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

アラームを使用しているアクティビティまたはサービスが、「時間がアップしている」場合アンドロイドマニフェストで指定されたアクションに一致するインテントを送信しなければなりません。あなたはこのような何かをする必要があります:

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

は、この情報がお役に立てば幸いです。

乾杯

+0

返信ありがとうございます!私は私のpost.Iでアラームをトリガするためのマニフェストファイルとコードを含むあなたが投稿した2番目のコードスニペット?私はandroid.Plsに新しい私を助けます... – Kiruthika

+0

@Kiruthika:あなたの 'startAlert'では' Intent intent = new Intent(this、MyBroadcastReceiver.class); 'を' Intentインテント=新しいインテント( "xyz.abc.YOUR_ACTION"); – ccheneson

+0

@ccheneson:わかりました。ありがとう! – Kiruthika

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

+0

:ありがとうございます!それは正常に動作します... – Kiruthika

0

まず、マニフェストファイルにMyBroadcastReceiverの前にピリオドを追加してみます。それはのようになります:android:name = "。MyBroadcastReceiver"。

これでうまくいかない場合は(うまくいけば)「コンテキスト」を追加してみてください。 ALARM_SERVICE前に、この行に:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

ので、それは次のようになります。

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

そうでなければ、私は何がすぐに明らかに見ていないのです。

+0

ヤツthats右!それは私が作った間違いの1つです。それを見つけてくれてありがとう... – Kiruthika

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> 

ありがとうございました!

関連する問題