安卓闹钟不工作

标签 android alarmmanager

我已经为此苦苦挣扎了几个小时。我还检查了文档和几个主题。我在两个主题中找到了这段代码,两个人都说代码运行良好,但在我的电脑上却不行。第一个 Toast 出现,但第二个从不出现。怎么了?

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

    }
 }

最佳答案

实际上您不需要指定操作,因为您使用类 AlarmReceiver.class在 Intent 中。

在你的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) 第二种方式。通过这种方式,您可以只使用 1 个文件 HelloWorld2.java :

在您的 Activity 中,创建您的广播接收器并注册它。

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


    }

关于安卓闹钟不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4660823/

相关文章:

java - 我想要这个..在一帧中对我的多个标记进行 map 缩放。现在我的 map 缩放显示国家/地区的中心位置

android - 如何知道我的应用程序使用的 RAM

android - 为应用程序创建 Android Assets (LPDI、MDPI、HDPI、XHDPI)?

java - 使用改造上传带有 json 对象的文件

Android AlarmManager 以 BOOT_COMPLETED 开始,然后通过应用程序与之交互

android - 卸载 Android 应用程序是否会终止配置的任何警报?

android - 如何解决服务实例问题?

java - 如何编写为 firebase 调用数据库子级的代码

android - 如何在Android中只触发一次闹钟?

java - Android Oreo+ 中的 AlarmManager 和 BroadcastReceiver