BroadcastReceiverでアラームマネージャーを使用しようとしています。 チュートリアル:システムサービスとBroadcastReceiver で与えられた例を使用しようとしています。しかし、時間の終了後に例を実行すると、トーストが表示されません。コードは以下のとおりです。
私の主な活動:
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();
}
}
私の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);
}
}
私のメインレイアウト:
<?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>
およびマニフェストファイル:
<?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>
受信者はBroadcastReceiverから拡張する必要があります
public class MyBroadcastReceiver extends BroadcastReceiver {
// ...
}
また、マニフェストファイルのレシーバー名が正しいことを確認してください。
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);*/
}
}
「extendsBroadcastReceiver」を追加して、onReceive()オーバーライドメソッドを取得する必要があります。
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();
}
}
どこにも呼び出さなかったstartAlert関数を作成したので、最初にonCreateでそのメソッドを呼び出すと、トーストが届きます。