آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نوتیفیکیشن

کوثر  10 سال پیش  10 سال پیش
+1 0

دوستان من یه سوال دارم.یه جیسان دارم که اطلاعات رو ازش میخونم و درون برنامه نشون میدم.حالا میخوام واسه یه قسمت از جیسان نوتیفیکیشن بذارم که با گذاشتن پست جدید روی سایت نوتیفیکیشن بیاد.تاجایی که سرچ زدم متوجه شدم که باید از ریسیور بررسی وضعیت نت استفاده کنم و بعد اگر اوکی بود نت این نوتیفیکیشن رو نشون بده.اما یه مشکلی که دارم اینه که هر بار به نت وثل میشم این نوتیفیکیشن هی میاد .نمیدونم چطور باید هندل کنم که یکبار که کاربر دیدش دیگه نیاد.کدامو به صورت خیلی ساده زیر گذاشتم.دوستان عزیزی که کار کردن راهنمایی  کنید.ممنون

 public class NetworkChangeReceiver extends BroadcastReceiver {
public static String status;
@Override
public void onReceive(final Context context, final Intent intent) {

status = NetworkUtil.getConnectivityStatusString(context);

Toast.makeText(context, status, Toast.LENGTH_LONG).show();
status = NetworkUtil.getConnectivityStatusString(context);

Toast.makeText(context, status, Toast.LENGTH_LONG).show();


PendingIntent pi = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);

Resources r = context.getResources();

Notification notification = new NotificationCompat.Builder(context)
.setTicker("notification_title")
.setSmallIcon(android.R.drawable.ic_menu_report_image)
.setContentTitle("title")
.setContentText("text")
.setContentIntent(pi)
.setAutoCancel(true)
.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManager notificationManager = (NotificationManager)context. getSystemService(context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notification);




}
}
 public class NetworkUtil {

public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;


public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
return TYPE_WIFI;

if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
return TYPE_MOBILE;
}
return TYPE_NOT_CONNECTED;
}

public static String getConnectivityStatusString(Context context) {
int conn = NetworkUtil.getConnectivityStatus(context);
String status = null;
if (conn == NetworkUtil.TYPE_WIFI) {
status = "Wifi enabled";
} else if (conn == NetworkUtil.TYPE_MOBILE) {
status = "Mobile data enabled";
} else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
status = "Not connected to Internet";
}
return status;
}
}
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.isun.httpwww.myapplication">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="in.isun.httpwww.myapplication.NetworkChangeReceiver"
android:label="NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
</application>

</manifest>
+1 0
میتونید یک ID اضافه کنید به نوتیفیکیشن. بعد هر نوتیفیکیشن که نمایش داده شد IDش رو ذخیره کنید به عنوان آخرین نوتیفیکیشن، بعد دفعه بعدی قبل از نمایش چک کنید آیا این نوتیفیکیشن قبلا نمایش داده شده یا نه. اگه IDش رو قبلا ذخیره کرده بودید دیگه نشون ندید. (10 سال پیش)
0 0
شما باید تونیفیکیشن رو از طرف سرورتون بفرستید (هر وقت که پست جدید میزارید) و خود نوتیفیکیشن به محض اینکه کاربر به اینترنت وصل بشه براش ارسال میشه و شما لازم نیست که اصن وضعیت اینترنت کاربر رو مدام چک کنید (10 سال پیش)
0 0
در روشی که شما استفاده کردید هر بار که کاربر به اینترنت وصل میشه باید اطلاعات سمت سرورتون هم بررسی بشه که آیا پست جدید اومده یا نه؟ (کدش رو باید پیاده سازی کنید در سرور) اگه اومده بود که به اندرویدتون میگید برای من یه نوتیفیکیشن بساز اگه نه که هیچی! ولی شما در این جا هر وقت که کاربر به اینترنت متصل میشه برای نوتیفیکیشن میفرستید و اصن چک نمیکنید که پست جدید روی سایت اومده یا نه! (10 سال پیش)
0 0
روش بالا روش دریافت اطلاعات به صورت Pull Request هست یعنی شما بی جهت به سرورتون درخاست میفرستید... ممکنه کاربر ده بار در روز به اینترنت وصل بشه و شما هم ده بار دارید درخاست ارسال میکنید که آیا پست جدید اومده یا نه؟ این روش کاملا روش غلطی برای دریافت نوتیفیکشن هست و اصلا نباید از این روش استفاده کنید مگر در موارد بسیار خاص که چاره دیگری ندارید... (10 سال پیش)
0 0
ولی شما برای این کار یه راه خیلی خوب جلوتون هست اونم اینه که مثلا شما از سایت OneSignal.com برای سرویس نوتیفیکشن استفاده میکنید بعد میرید از قسمت Rest API که توی سایتشون استفاده میکنید و کدی که مخصوص ارسال نوتیفیکشن هست رو به زبان php برمیدارید و در سایتتون قرار میدید و وقتی اون کد رو اجرا میکنید که دارید مطلب جدیدی روی سایت میزارید... مثلا یه فرم درست کنید که وقتی دارید پست جدید میزارید تا در دیتابیس ثبت بشه اون کدی مخصوص ارسال نوتیفیکشن هم اجراش کنید که برای همه کاربراتون ارسال بشه و دیگه لازم نیست شما وضعیت اینترنت کاربر رو چک کنید و به سایتتون درخاست های مکرر بدید و .... (10 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .