Получение сигналов тревоги в Android - PullRequest
0 голосов
/ 28 марта 2012

В моем проекте я использую код тревоги. Нет ошибки, но что-либо в классе BroadcastReceiver не выполняется. Я не понимаю, где вина. Я делаю это в Windows, используя Eclipse. Я также указал класс <receiver> в AndroidManifest.xml.

Я хочу, чтобы код внутри класса 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. Это код, который я использовал для запуска приемника.

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();
}

Ответы [ 4 ]

2 голосов
/ 28 марта 2012

Глядя только на этот фрагмент кода, ответить нелегко.Однако вполне вероятно, что вы не указали фильтр намерений для получателя в манифесте.

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

Операция или служба, которая использует сигнал тревоги, когда «истекло время», должна отправитьНамерение, соответствующее действию, указанному в манифесте Android.Вы должны сделать что-то вроде этого:

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

Надеюсь, это поможет.

Приветствия

0 голосов
/ 30 марта 2012

Этот код отлично работает:

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>

Спасибо всем за помощь !!!

0 голосов
/ 29 марта 2012

Сначала попробуйте добавить точку в файле манифеста перед MyBroadcastReceiver.Он должен выглядеть следующим образом: android: name = ". MyBroadcastReceiver".

Если это не сработает (хотя, надеюсь, это сработает), попробуйте добавить «Context».перед ALARM_SERVICE в этой строке:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

, поэтому это будет выглядеть так:

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

В противном случае я не вижу ничего очевидного сразу.

0 голосов
/ 28 марта 2012

Я думаю, что проблема в файле манифеста.

Попробуйте удалить этот параметр "android: process =": ​​remote "" из вашего приемника.

EDIT: Пожалуйста, посмотрите мой код ниже, он работает отлично. Надеюсь, это поможет.

// 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));  
    }  
}
...