オリジナルのクラスは全て同じパッケージ内のクラスなので、インポート文、パッケージ文は省略します。
Broadcastを使うものは、AndroidManifest.xmlにreceiverタグを忘れずに記述しましょう。
1. 5秒後にトーストを表示
AndroidManifest.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.aillice_android.example.alarmmanagersample"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <receiver android:name=".MyBroadcast"/> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 5秒後にBroadcastを実行する */ Intent i = new Intent(getApplicationContext(), MyBroadcast.class); PendingIntent pi = PendingIntent.getBroadcast( getApplicationContext(), 1, i, PendingIntent.FLAG_ONE_SHOT ); // Calendarインスタンスに5秒後の時間を設定する Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND, 5); // AlarmManagerにセットする AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi); } } |
MyBroadcast.java
1 2 3 4 5 6 7 8 9 10 11 |
public class MyBroadcast extends BroadcastReceiver { public static final String TAG = MyBroadcast.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "hogehoge", Toast.LENGTH_SHORT).show(); Log.d(TAG, "hogehoge. "); } } |
2. 5秒後にノーティフィケーションを表示する
AndroidMafinest.xmlは1と同じため割愛。
MyBroadcast.javaにノーティフィケーションを表示する処理を書いても、表示されずに通知音のみ機能した。
と思ったらノーティフィケーションはsetSmallIcon()をコールしないと、通知領域に表示されないそうです。はい。
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 5秒後にBroadcastを実行する */ Intent i = new Intent(getApplicationContext(), MyBroadcast.class); PendingIntent pi = PendingIntent.getBroadcast( getApplicationContext(), 1, i, PendingIntent.FLAG_ONE_SHOT ); // Calendarインスタンスに5秒後の時間を設定する Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND, 5); // AlarmManagerにセットする AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi); } } |
MyBroadcast.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class MyBroadcast extends BroadcastReceiver { public static final String TAG = MyBroadcast.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "hogehoge. "); PendingIntent pi = PendingIntent.getBroadcast( context, 1, new Intent(context, MyBroadcast.class), PendingIntent.FLAG_ONE_SHOT); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.mipmap.ic_launcher); builder.setLargeIcon(((BitmapDrawable)context.getResources().getDrawable(R.mipmap.ic_launcher)).getBitmap()); builder.setContentTitle("Title"); builder.setContentText("Content text."); builder.setContentInfo("Content info."); builder.setTicker("Ticker."); builder.setWhen(System.currentTimeMillis()); builder.setAutoCancel(false); builder.setDefaults(Notification.DEFAULT_ALL); builder.setContentIntent(pi); NotificationManagerCompat.from(context).notify(1, builder.build()); } } |
ノーティフィケーションをタップするとまた通知が表示されるようになっています。表示が消えないのではなく、消えた表示がすぐに現れる様になっているだけです。
3. 5秒毎にトーストを表示する
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = new Intent(getApplicationContext(), MyBroadcast.class); PendingIntent pi = PendingIntent.getBroadcast( getApplicationContext(), 1, i, PendingIntent.FLAG_UPDATE_CURRENT ); // AlarmManagerにセットする AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, 5000, pi); } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
public class MyBroadcast extends BroadcastReceiver { public static final String TAG = MyBroadcast.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "hogehoge. "); Toast.makeText(context, "hogehoge", Toast.LENGTH_SHORT).show(); } } |