Soru & Cevap

zamanlanmış notification ...

20.09.2017 - 11:38

yaptığım uygulamada günün belli saatlerinde kullanıcıya uygulamaya girmesi gerektiğini hatırlatan bir bildirim göndermek istiyorum(Örneğin her akşam 21:30'da bir bildirim göndersin). Bunun için ne kullanmalıyım? Nasıl yapmalıyım? 

kodlarıyla paylaşırsanız diğer arkadaşlara da faydalı olacağını ve herkes tarafından her zaman kullanılabileceğini düşünüyorum. şimdiden teşekkürler...

 

163 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user ademb14
ademb14
20.09.2017 - 06:12

biraz araştırdım. genelde kodlar eksik verilmiş. ben bulduğum bi kodu paylaşmak istiyorum. Başkaları için de faydalı olabilir. kaynak : https://github.com/jcacosta25/ScheduleNotification

1-AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent notificationIntent = new Intent(context, NotificationActivity.class);
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addNextIntent(notificationIntent);

        PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        Notification notification = builder.setContentTitle("Deneme")
                .setContentText("Test")
                .setTicker("New Message Alert!")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setAutoCancel(true)
                .setContentIntent(pendingIntent).setSound(alarmSound).build();


        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0,notification);
    }

2-NotificationActivity.java

public class NotificationActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notification);

        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        Intent notification2Intent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
        notification2Intent.addCategory("android.intent.category.DEFAULT");

        PendingIntent broadcast = PendingIntent.getBroadcast(this,100,notification2Intent,PendingIntent.FLAG_UPDATE_CURRENT);

        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.SECOND, 15);

        alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY, broadcast);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            alarmManager.setExact(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),broadcast);
        } else {
            alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),broadcast);
        }
    }
}

3-MainActivity.java

public class MainActivity extends AppCompatActivity {
    
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");

    PendingIntent broadcast = PendingIntent.getBroadcast(this,100,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 21);
    calendar.set(Calendar.MINUTE,30);
    calendar.add(Calendar.SECOND, 0);

    alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, broadcast);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),broadcast);
    } else {
        alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),broadcast);
    }
    }
}

4-activity_notification.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_notification"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.juancacosta.schedulenotification.NotificationActivity">

    <TextView
        android:text="Show Notification Details Here..."
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

5-activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.juancacosta.schedulenotification.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

6-AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.media.action.IMAGE_CAPTURE"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.media.action.IMAGE_CAPTURE"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <activity android:name=".NotificationActivity"/>
        <receiver android:name=".AlarmReceiver">
            <intent-filter>
                <action android:name="android.media.action.DISPLAY_NOTIFICATION"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </receiver>
    </application>

kolay gelsin...

picture-42119-1424960805.png
ibolat
20.09.2017 - 12:08

Merhaba,

Hafif bir google araması yaparak bir sürü örnek bulabilirsiniz. Android için background service yazacaksınız arkaplanda sürekli çalışan içerisinde zaman kontrolü yaparak örnek olarak dedğiniz gibi 21:30 olunca notification func çalıştıran bir method yazacaksınız.

https://www.tutorialspoint.com/android/android_services.htm

    final class myThread implements Runnable {
        int service_id;

        myThread(int service_id) {
            this.service_id = service_id;
        }

        @Override
        public void run() {
            synchronized (this) {
                while (1 != 2) {
                    //Notification func calıstır.
                }
            }

        }

    

Background service'nin onStart methodunda boyle sonsuz calısacak bi yapı olusturup deneyebilirsin.

adem
20.09.2017 - 01:09
ilginiz için teşekkürler. araştırayım