BroadcastReceiver 和 AlarmManager Android

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21429726/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 04:34:00  来源:igfitidea点击:

BroadcastReceiver and AlarmManager Android

androidbroadcastreceiveralarmmanagerandroid-alarms

提问by zied

I am trying to use an alarm manager with BroadcastReceiver. I try to use the example given in Tutorial: System Services and BroadcastReceiver. but when I run the example after the end of the time the toast doesn't show up. the code is below:

我正在尝试将警报管理器与 BroadcastReceiver 一起使用。我尝试使用教程:系统服务和 BroadcastReceiver 中给出的示例。但是当我在时间结束后运行示例时,吐司没有出现。代码如下:

My main Activity:

我的主要活动:

public class AlarmActivity extends Activity {


    /** Called when the activity is first created. */

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

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


}

my broadCastReceiver:

我的广播接收器:

public class MyBroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Don't panic but your time is up!!!!.",
                Toast.LENGTH_LONG).show();
        // Vibrate the mobile phone
        Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(2000);
    }

}

my main Layout:

我的主要布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >

    <EditText
            android:id="@+id/time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="Number of seconds"
            android:inputType="numberDecimal" >
    </EditText>

    <Button
            android:id="@+id/ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="startAlert"
            android:text="Start Counter" >
    </Button>

</LinearLayout>

and the manifestfile:

和清单文件:

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <uses-permission android:name="android.permission.VIBRATE" >
    </uses-permission>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.broadcastreceiver.AlarmActivity"
            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="com.example.android_alarm.MyBroadcastReceiver" >
        </receiver>
    </application>

</manifest>

回答by sudanix

The receiver must extend from BroadcastReceiver

接收器必须从 BroadcastReceiver 扩展

public class MyBroadcastReceiver extends BroadcastReceiver {
    // ...
}

Also be sure that receiver name in manifest file is correct.

还要确保清单文件中的接收者名称是正确的。

回答by Rajan

your MyBroadcastReceiver class is wrong put this code

你的 MyBroadcastReceiver 类是错误的把这段代码

public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
     Toast.makeText(context, "Don't panik but your time is up!!!!.",
                Toast.LENGTH_LONG).show();
        // Vibrate the mobile phone
        /*Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(2000);*/       
}
}

just you need to add "extends BroadcastReceiver" and get onReceive() overriding method.

只需要添加“扩展广播接收器”并获取 onReceive() 覆盖方法。

回答by user3243163

You just forgot to override OnReceive()method. public void onReceive(Context context, Intent intent)is predefined method of BroadcastReceiver, wheneven you are using it, You must @Override it as follows,

你只是忘了覆盖OnReceive()方法。public void onReceive(Context context, Intent intent)是 BroadcastReceiver 的预定义方法,即使你正在使用它,你也必须@Override 它如下,

public class MyBroadcastReceiver extends BroadcastReceiver
{
    @Override   // You forgot this line 
    public void onReceive(Context context, Intent intent) 
    {
          Toast.makeText(context, "Don't panik but your time is up!!!!.",Toast.LENGTH_LONG).show();
    }
}

回答by Malti Devnani

You have created a startAlert function which u didn't call anywhere.So first call that method in onCreate and then you will receive a toast.

你已经创建了一个你没有在任何地方调用的 startAlert 函数。所以首先在 onCreate 中调用该方法,然后你将收到一个祝酒词。