2012-05-03 2 views
6

Я нашел несколько руководств по настройке приемника сигналов тревоги для отправки тоста в установленные интервалы времени. и я слежу за кодом и разбил свой собственный проект на 3 класса.Alarm Receiver и Android Manifest

HelloDroidActivity.java является:

package com.example.helloandroid; 

import java.util.Calendar; 

import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.example.helloandroid.alarms.MyAlarmReciever; 

public class HelloDroidActivity extends Activity { 
/** Called when the activity is first created. */ 

public static int RTC_WAKEUP; 
public static long INTERVAL_FIFTEEN_MINUTES; 

private AlarmManager alarmMgr; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView tv = new TextView(this); 
    tv.setText("Hello, Krishneel"); 
    setContentView(tv); 
    Toast.makeText(this, "Alarm went off", Toast.LENGTH_SHORT).show(); 

    Log.d("OnCreate", "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"); 
    alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, MyAlarmReciever.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 5); 
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, 
      calendar.getTimeInMillis(), 7000, pendingIntent); 

} 
} 

также MyAlarmReciever.java (я уже известно о орфографической ошибки на имя):

package com.example.helloandroid.alarms; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.widget.Toast; 

public class MyAlarmReciever extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     Log.e("onReceive", "ladskjflsakjdflskjdflskjdfslkjdflasdf"); 
     Toast.makeText(context, "OnReceive alarm test", Toast.LENGTH_SHORT).show(); 
    } 
} 

и Android Manifest, который выглядит это:

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

    <uses-sdk android:minSdkVersion="7" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name="com.example.helloandroid.HelloDroidActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

     <receiver android:name="AlarmReceiver"> 
      <intent-filter> 
       <action android:name="com.example.helloandroid.alarms" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

Я прочитал, что для того, чтобы проект получил мою тревогуR Класс eceiver java Мне нужно отредактировать манифест с новым ресивером. но я довольно новичок в XML и не знаю, в каком направлении двигаться.

+0

Один из сайтов я использую для учебника [http://justcallmebrian.com/?p=129](http://justcallmebrian.com/? p = 129) – kprasad89

+0

Посмотрите на это, этот работал для меня. http://www.dotkam.com/2011/01/10/android-prefer-alarms-and-intent-receivers-to-services/ – VendettaDroid

ответ

0

В вашем манифесте приемник прослушивает действие под названием com.example.helloandroid.alarms. Но в вашем HelloDroidActivity.java не добавлено такого намерения.

public class HelloDroidActivity extends Activity { 
//.... 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    //.... 
    Intent intent = new Intent(this, MyAlarmReciever.class); 
    intent.setAction("com.example.helloandroid.alarms"); 
    //.... 
    } 
} 
3

Уже есть приемник, который вы определили в файле манифеста. Но это имя неверно, так как имя должно быть полным именем класса i.e package.RecieverName. И в вашем случае имя вашего ресивера - MyAlarmReciever. Таким образом, приемник будет определяться следующим образом

<receiver android:name=".alarms.MyAlarmReciever"> 
    <intent-filter> 
     <action android:name="com.example.helloandroid.alarms" /> 
    </intent-filter> 
</receiver>