НТН

олся с этим часами. Я также проверил документацию и несколько тем. Я нашел этот код в двух темах, оба парни сказали, что код работает отлично, но не на моем компьютере. Появляется первый тост, а второй никогда. Что случилось?

public class HelloAndroid2 extends Activity {  


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);   

    Intent intent = new Intent(this, AlarmReceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
    intent, PendingIntent.FLAG_ONE_SHOT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent);
    Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();

}

 public final class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();

    }
 }

}

 ccheneson11 янв. 2011 г., 19:05
Пожалуйста, покажите свой AndroidManifest.xml. Вы должны указать получателя вещания в манифесте и на действия, на которые он будет реагировать

Ответы на вопрос(3)

пока я не обнаружил, что я поместил свой Broadcast Receiver в другой пакет, а не в общий пакет.

Просто изменилось:

<receiver android:name=".AndroidAlarmService" android:enabled="true" >

за:

<receiver android:name="com.MyCompany.MyPackage.AndroidAlarmService" android:enabled="true" >
 ahmadalibaloch12 окт. 2016 г., 15:53
благодарю вас. Это должно быть предупреждение от Android. Я потратил впустую час.
 Terranology19 нояб. 2015 г., 19:48
Это прекрасно работает для меня ¡Thx ¡
Решение Вопроса

так как вы используете классAlarmReceiver.class в намерении.

В вашейAndroidManifest.xmlубедитесь, что у вас есть определение получателя в пределах<application> теги, что-то вроде:

<receiver android:name="AlarmReceiver">

Изменить: Хорошо, есть 2 способа использования вашего вещательного приемника.

1) из предоставленного вами кода,AlarmReceiver.java это будет содержать:

public final class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();

    }
 }

а такжеHelloAndroid2.java:

public class HelloAndroid2 extends Activity {  


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);   

    Intent intent = new Intent(this, AlarmReceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
    intent, PendingIntent.FLAG_ONE_SHOT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent);
    Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();

}

}

Таким образом, вы можете настроить приемник вещания на работу сAndroidManifest.xml и тег<receiver ...>

2) 2-й способ. Таким образом, вы можете использовать только 1 файлHelloWorld2.java:

В своей деятельности создайте свой приемник и зарегистрируйте его.

public class HelloWorld2 extends Activity {
    private SharedPreferences prefs;
    private String mName;


    BroadcastReceiver alarmReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "Alarm worked", Toast.LENGTH_LONG).show();          
        }
    };


    public static final String ACTION_NAME = "com.helloworld.MYACTION";
    private IntentFilter myFilter = new IntentFilter(ACTION_NAME);


    @Override
    protected void onPause() {
        unregisterReceiver(alarmReceiver);
        super.onPause();
    }

    @Override
    protected void onResume() {
        registerReceiver(alarmReceiver, myFilter);
        super.onResume();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        registerReceiver(alarmReceiver, myFilter);

        Intent intent = new Intent(ACTION_NAME);        

        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
        intent, PendingIntent.FLAG_ONE_SHOT);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent);
        Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();


    }
 erdomester11 янв. 2011 г., 20:22
Извините, я не знаю, как сделать так, чтобы код выглядел здесь.
 ccheneson12 янв. 2011 г., 19:22
Это связано с тем, что если вы встроили приемник вещания в действие, вам необходимо зарегистрировать его в действии. Больше информации наdeveloper.android.com/reference/android/content/..., android.content.IntentFilter).
 erdomester11 янв. 2011 г., 20:14
Спасибо за ответ, но все равно ничего. Это XML-файл: <приложение android: icon = "@ drawable / icon" android: label = "@ string / app_name"> <получатель android: name = "AlarmReceiver"> </ получатель> <активность android: имя = ".HelloAndroid2" android: label = "@ string / app_name"> <intent-filter> <action android: name = "android.intent.action.MAIN" /> <категория android: name = "android.intent.category. LAUNCHER "/> </ intent-filter> </ activity> </ application> [/ code]
 woot29 янв. 2019 г., 03:43
Ах ....... Я не могу сказать вам, сколько времени я потратил, пытаясь понять это. Манифест! Спасибо!
 ccheneson11 янв. 2011 г., 20:25
Вы должны добавить это в свой пост и опубликовать что-то вроде «Редактировать», чтобы люди знали, что это дополнительная информация

не получать любые обратные вызовы, когдаAlarmManager срабатывает просроченная тревога. Вам просто нужно проверить это:отправив неправильныйIntent при созданииPendingIntent, Например, вы хотели получить звонокonReceive на одном из ваших приемников, но вы создали экземплярPendingIntent черезgetActivity или жеgetService, но то, что вы на самом деле имели в видуgetReceiver.

При создании экземпляраPendingIntentесть много способов его создать (getService, getActivity,getReceiver, getForegroundService:

если ты хочешьActivity Получатель намерения, то вы:

PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_*);

если ты хочешьBroadcastReceiver получатель намерения:

PendingIntent.getReceiver(this, 0, intent, PendingIntent.FLAG_*);

если ты хочешь передний планService получатель намерения:

PendingIntent.getForegroundService(this, 0, intent, PendingIntent.FLAG_*);

если вы хотитеService получатель намерения:

PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_*);

Также убедитесь, что вы намерены указывать на правильный класс. (например, создание намерений для деятельности, обслуживания и т. д.). Вы будетене принять любой вызов, если вы передадите ошибочно, как это:

Intent intent = new Intent(this, MyReceiver.class); // You wanted receiver

// PendingIntent was created in such a way 
// you wanted this to be received by an activity. 
// you will not receive any call if you set it up like this.
PendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_*); 

Я также отправил аналогичный ответВот.

НТН

Ваш ответ на вопрос