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

آموزش معرفی برنامه ها در Push Notification

h_r_v  10 سال پیش  9 سال پیش
+61 0

سلام! اگه شما هم مثل من تعداد زیادی برنامه داشته باشید و آموزش Push Notification رو مطالعه کرده باشید این فکر به ذهنتون میخوره :دی
بریم سر اصل مطلب :|
کد های اینجا طبق آموزش Push Notification استاد هستن و من فقط چند تا تغییر توی کد سرور و دریافتشون دادم :)

G.java

 import org.json.JSONException;
import org.json.JSONObject;

import android.app.Application;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.RingtoneManager;
import android.net.Uri;
import android.support.v4.app.NotificationCompat;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RemoteViews;


public class G extends Application {

public static Context context;
public static C2D service;


@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();

startPushNotification();
}


private void startPushNotification() {
service = new C2D()
.key("instatag")
.url("http://c2d.yekteam.com/service.php")
.interval(1000)
// .network(C2D.NETWORK_ALWAYS)
.listener(new C2D.Listener() {

@Override
public void onDataReceive(String data) {
try {
JSONObject object = new JSONObject(data);
String title = object.getString("title");
String title_first = object.getString("title_first");
String matn = object.getString("matn");
String link = object.getString("link");
boolean status = object.getBoolean("status");
if (status == true){
Notification(title,matn,link,title_first);
}
else {}
} catch (JSONException e) {

e.printStackTrace();
}

}
}).start();
}
public void Notification(String title, String matn, String link, String title_first) {

Uri uri = Uri.parse("market://details?id=" + link);
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, goToMarket,
PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSound(alarmSound)
.setSmallIcon(R.drawable.attention)
.setTicker(title_first)
.setContentTitle(title)
.setContentText(matn)
.setContentIntent(pIntent)
.setAutoCancel(true);

NotificationManager notificationmanager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationmanager.notify(0, builder.build());

}
}

C2D.java

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;


public class C2D {

public static final int PROTOCOL_EXCEPTION = -1;
public static final int IO_EXCEPTION = -2;
public static final int UNKNOWN_EXCEPTION = -3;

public static final int NETWORK_ALWAYS = 1;
public static final int NETWORK_JUST_WIFI = 2;


public static interface Listener {

public void onDataReceive(String data);
}

private Listener listener;
private String key;
private long interval;
private int network;
private String url;

private ArrayList<NameValuePair> inputArguments = new ArrayList<NameValuePair>();

private boolean enable = true;


public C2D listener(Listener value) {
listener = value;
return this;
}


public C2D interval(long value) {
interval = value;
return this;
}


public C2D network(int value) {
network = value;
return this;
}


public C2D url(String value) {
url = value;
return this;
}


public C2D key(String value) {
key = value;
return this;
}


public void disable() {
enable = false;
}


public void enable() {
if (enable) {
return;
}

enable = true;
start();
}


public C2D start() {
Thread thread = new Thread(new Runnable() {

@Override
public void run() {
while (enable) {
try {
check();
Thread.sleep(interval);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});

thread.start();
return this;
}


public void check() {
int status = readNetworkStatus();
if (status == DISCONNECTED) {
return;
}

if (network == NETWORK_JUST_WIFI && status == MOBILE) {
return;
}

Thread thread = new Thread(new Runnable() {

@Override
public void run() {
try {
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 1000);
HttpConnectionParams.setSoTimeout(params, 1000);
HttpClient client = new DefaultHttpClient(params);
HttpPost request = new HttpPost(url);
inputArguments.clear();
inputArguments.add(new BasicNameValuePair("key", key));
request.setEntity(new UrlEncodedFormEntity(inputArguments));
HttpResponse httpResponse = (HttpResponse) client.execute(request);
String data = streamToString(httpResponse.getEntity().getContent());
if (listener != null) {
listener.onDataReceive(data);
return;
}
}
catch (ClientProtocolException e) {}
catch (IOException e) {}
catch (Exception e) {}
}
});

thread.start();
}


private String streamToString(InputStream inputStream) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuffer = new StringBuilder();

String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append((line + "\n"));
}
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return stringBuffer.toString();
}

private static final int DISCONNECTED = 0;
private static final int WIFI = 1;
private static final int MOBILE = 2;


private int readNetworkStatus() {
ConnectivityManager connectivityManager = (ConnectivityManager) G.context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
boolean isConnected = networkInfo.isConnected();

if (isConnected) {
int networkType = networkInfo.getType();
if (networkType == ConnectivityManager.TYPE_WIFI) {
return WIFI;
} else if (networkType == ConnectivityManager.TYPE_MOBILE) {
return MOBILE;
}
}

return DISCONNECTED;
}
}

service.php

 <?php
$key = $_REQUEST['key'];
if ($key = 'instatag') {

$array = array();
$array["status"] = false;
$array["title_first"] = "برنامه بستنی";
$array["title"] = "بستنی";
$array["matn"] = "کاملترین برنامه بستنی در کافه بازار! برای دریافت کلیک کنید";
$array["link"] = "com.yekteam.bastani";

echo json_encode($array);
}
?>

همه چیش واضحه! با استفاده از JSON یک سری فیلد از سرور میخونیم که ازشون برای ساخت ناتیفیکیشن استفاده میکنیم :)‌ میدونم کدم خیلی استاندارد نیست و اینکه ۷۰ درصد بچه های اینجا اینکار رو بلدن اما گفتم هم مطلبی به اشتراک گذاشته باشم هم اون ۳۰٪‌ هم یاد بگیرن :دی

0 0
مرسی ، نمیدونستم میشه اینجوری به مارکت ها لینک داد ! market://details?id=" + link (10 سال پیش)
0 0
خوب چرا لینک بازار رو مستقیم نمیزاری ، اونجوری بازار باز نمیکنه ؟! - یعنی واسه برنامه هایی که فقط تو بازار هستن (10 سال پیش)
0 0
A.L.U حاجی ما اینترنشنال کار میکنیم :))))) نه جدی شاید کسی بازار رو نداشته باشه! اگر هم کسی از بازار استفاده کنه! قبلا توی Always رو توی انتخاب زده! (10 سال پیش)
0 0
هنوز وقت نشده همه آموزشهای جدیدو ببینم ولی ظاهرا خوب کار کنه! فقط یه پیشنهاد برای بهتر شدنش. اطلاعات سرور رو از دیتابیس بخون (برای برنامه های بیشتر) و id آخرین برنامه گرفته شده رو توی یه sharedPreference ذخیره کن و هربار با اطلاعاتت به سرور بفرست که هربار نگه "بستنی داریم!" :) . منم حدود 2 هفته پیش همچین سرویسی برا یکی از برنامه هام نوشتم. ایشالا یادم باشه رفتم خونه کدهاش رو بذارم ;) (10 سال پیش)
0 0
نیما جان لطف کردی :) بالاخره بیان شدنش بهتر از نشدنش هست و توی وقت ما هم صرفه جویی میشه. ممنون (10 سال پیش)
+1 0
@صادق ، یه سوال ! ، الان ساعت 10 دقیقه به 6 صبح هست و شما 2 ساعت پیش گفتی رفتم خونه .. ؟! ، یعنی کجا بودی :دی ؟! (10 سال پیش)
0 0
واسه فرمایشی که فرموید صادق جان، یه فیلد اضافه کردم به اسم آیدی، یه preference هم به همین اسم ساختم! وقتی id گرفته شد، چک میشه که با id preference برابر هست یا نه! اگه باشه ناتیفیکیشن اجرا نمیشه! اگر نباشه که اجرا میشه و مقدار جدید id میشه! :) (10 سال پیش)
0 0
آقا یه سوال، البته شاید فقط من جواب این سوال رو ندونم پس اگه خیلی ابتدایی بود لطفا نخندید :) Push Notification چی هست؟ برا چی ازش استفاده میشه؟ (10 سال پیش)
0 0
دیدی بعضی برنامه ها رو که نصب میکنی؟ یهو یه ناتیفیکیشن معرفی بازی برات میاد؟ یا مثلا Real Racing اگه نصب کرده باشی، آفر های ویژه ماشینا میاد برات! کلا کارش اینه که اطلاعات رو از سرور میگیره و به ناتیفیکیشن تبدیل میکنه! (10 سال پیش)
0 0
البته push notification چیزی فراتر از اینیه که استاد درس دادن. الان توی این روش ما مثلا هر 1 ساعت باید سرور رو چک کنیم ببینیم خبری هست یا نه ولی توی push notiication یه بار یه ارتباط با سرور برقرار میشه و ارتباط زنده نگه داشته میشه. حالا ما هروقت خبری داشتیم اعلام میکنیم و به همه دستگاه ها فرستاده میشه که اینجوری دیگه دائم نیاز نیست سرور چک شه و از خودمون و کاربر منابع بگیریم ولی خب با محاسباتی که استاد انجام داد، همین سیستم هم خیلی منابع هدر نمیده و به خوبی میتونه جوابگو باشه (بالاخره ویدئو رو هم دیدم :) ) (10 سال پیش)
0 0
آهان مثل بازار که آپدیت برنامه ها رو میگه. ممنون از توضیحاتون (10 سال پیش)
0 0
خطا :روی builder.build() میگه تابع build() در NotificationCompat.Builder موجود نیست . چیکار کنم ؟ (10 سال پیش)
0 0
اصلاح شد باید جدیدترین نسخه android-support-v4.jar دانلود و افزوده میشد (10 سال پیش)
 برای این سوال 6 پاسخ وجود دارد.
پاسخ به سوال 
h_r_v  10 سال پیش
+9 0

در ادامه آموزش :دی
حالا میخوایم به جای روش استاد ( که ارتباط با سرور از طریق برنامه برقرار میشه ) از روشی استفاده کنیم که Push Notification ها حتی وقتی برنامه باز نیست هم اجرا بشن :) برای اینکار باید از BroadcastReceiver استفاده کنیم!
توی AndroidManifest این کد رو قرار بدید :

     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> // برای آلارم منیجر

<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>

حالا یه کلاس به اسم MyReceiver بسازید و این کد ها رو توش کپی کنید :

 import java.util.Calendar;



import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;


public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Calendar cal = Calendar.getInstance();
Intent srvIntent = new Intent(context, PushNo.class);
PendingIntent pIntent = PendingIntent.getService(context, 0, srvIntent, 0);
AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);


alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
21600000, pIntent);


}
}

در اینجا ما از AlarmManager استفاده کردیم، اونم واسه اینکه بعد از روشن شدن دستگاه! هر چند وقت یکبار یک سرویس اجرا شه، به سرور متصل شیم، ببینیم خبر جدیدی هست یا نه، اگر هست ناتیفیکیشن بده! برای قسمت "بعد از روشن شدن دستگاه" در Receiver استفاده کردیم، حالا باید برای قسمت "هر چند وقت یکبار یک سرویس اجرا شه" از AlarmManagerـی که توی MyReceiver هست استفاده کنیم! با اینکار کلاس PushNo اجرا میشه!PushNo یک سرویسه! برای تعریف کردنش توی AndroidManifest این رو قرار بدید :

         <service

android:name=".PushNo"
android:process=":remote" />

حالا یه کلاس به اسم PushNo بسازید که محتویاتش اینه :

 import org.json.JSONException;
import org.json.JSONObject;

import android.app.IntentService;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.RingtoneManager;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;

import android.util.Log;

public class PushNo extends IntentService{

public static Context context;
public static C2D service;
public static SharedPreferences preferences;
private static final String TAG = "MyService";

public PushNo() {
super("MyWebRequestService");
}

@Override
protected void onHandleIntent(Intent intent) {
Log.i("LOG", "Started :))");
context = getApplicationContext();
preferences = PreferenceManager.getDefaultSharedPreferences(context);
startPushNotification();
Log.d(TAG, "onStart");

}
private void startPushNotification() {
service = new C2D()
.key("flashlight")
.url("http://c2d.yekteam.com/service.php")
.interval(21600000)
// .network(C2D.NETWORK_ALWAYS)
.listener(new C2D.Listener() {

@Override
public void onDataReceive(String data) {
try {
SharedPreferences settings = getSharedPreferences("id", MODE_PRIVATE);
SharedPreferences.Editor prefEditor = settings.edit();
JSONObject object = new JSONObject(data);
String title = object.getString("title");
String title_first = object.getString("title_first");
String matn = object.getString("matn");
String link = object.getString("link");
Integer id = object.getInt("id");
int id2 = settings.getInt("id", 0);
Log.i("LOG", "ID2 is " + id2);
if (id2 != id){
prefEditor.putInt("id", id);
prefEditor.commit();
boolean status = object.getBoolean("status");
if (status == true){
Notification(title,matn,link,title_first);
}
else {}
}
} catch (JSONException e) {

e.printStackTrace();
}

}
}).start();

}
public void Notification(String title, String matn, String link, String title_first) {

Uri uri = Uri.parse("market://details?id=" + link);
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, goToMarket,
PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSound(alarmSound)
.setSmallIcon(R.drawable.attention)
.setTicker(title_first)
.setContentTitle(title)
.setContentText(matn)
.setContentIntent(pIntent)
.setAutoCancel(true);

NotificationManager notificationmanager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationmanager.notify(0, builder.build());


}
}

با اینکار شما دیگه به تغییر فایل G.java که در پست اول هست نیاز ندارید! و با دادن فاصله زمانی در Receiver هر وقت خبر جدیدی بود به صورت Push Notification نشون میده :)
فایل سرویس در نهایت به این شکل شد :)

 <?php
$key = $_REQUEST['key'];
if ($key == 'instatag') {

$array = array();
$array["id"] = 2;
$array["status"] = true;
$array["title_first"] = "برنامه بستنی";
$array["title"] = "بستنی";
$array["matn"] = "کاملترین برنامه بستنی در کافه بازار! برای دریافت کلیک کنید";
$array["link"] = "com.yekteam.bastani";

echo json_encode($array);
}

اگه امتحان کردید دیدید فقط یکبار PushNotification نشون داده میشه واسه اینه که بعد از هر نمایش باید id در قسمت service.php رو عوض کنید :)

0 0
مرسی، ایده ی استفاده از id به عنوان یک pref که هر بار باید سمت سرور تغییر بدی تا Notification بده جالبه. فقط فلسفه status رو نفهمیدم وقتی از آیدی هم استفاده کردی! (10 سال پیش)
+1 0
اگه کسی برنامه رو تازه نصب کرده باشه موقع اجرا ناتیفیکیشن میگیره! اگه false باشه نمیگیره! یه فرق کوچیک با id داره (10 سال پیش)
0 0
برای من اجرا نمیشه از امولاتور رو بستم و دوباره هم اجرا کردم ولی خبری نشد. چطور میشه خطایابیش کرد و علت رو پیدا کرد (10 سال پیش)
0 0
اگه امکان داره سورس کامل رو بصورت یه پروژه قرار بده (10 سال پیش)
0 0
توی دیوایس اجراش کردید؟ (10 سال پیش)
0 0
یه مشکلی که اینجا هست اینه که تا کاربر یکبار گوشی رو خاموش و روشن نکنه برنامه چیزی رو دریافت نخواهد کرد . برای کارکردن برنامه بلافاصله بعد از نصب چه باید کرد ؟ (10 سال پیش)
0 0
آموزش استاد رو ببینید و از on boot complete listener استفاده کنید :) (10 سال پیش)
0 0
کدوم بخش از آموزش ها رو برای اینکه بلافاصله بعد از نصب برنامه یه رسیور فعال بشه رو باید چک کرد (10 سال پیش)
0 0
یه سوال؛شما هم توی MyReceiver و هم توی PushNo تایم 6 ساعت رو دادید.توی یکیش باشه کافی نیست؟ (10 سال پیش)
0 0
یه سوال؛شما هم توی MyReceiver و هم توی PushNo تایم 6 ساعت رو دادید.توی یکیش باشه کافی نیست؟ (10 سال پیش)
0 0
سلام دوستان ..کدهای استاد رو در لوگ نشون میده ...کدهای h_r_v رو هم اظافه کردم ولی در لوگ چیزی نشون داده نمیشه .. (9 سال پیش)
0 0
*اضافه (9 سال پیش)
0 0
من از پست اول که استفاده میکنم و با ایده ای دی که فرمودید قاطی کردم و کد ها درست هستش. اما وقتی میام با پست دوم پیاده کنم که توی برنامه هم نخواد باشی تا اجرا شه هیچ اتفاقی نمیوفته و ارور هم نمیده ولی چیزی هم نمیگیره. دقیقا کد هاتون رو کپی کردم فقط. چیزی هست که مثلا بدیهی باشه ننوشته باشید اینجا یا من مشکل دارم؟! (9 سال پیش)
پاسخ به سوال 
طاهر  10 سال پیش
0 0

آقا این خطای اتصال به اینترنت رو میده بدجور رفته روی اعصاب من

 دسترسی به اینترنت هم تعریف شده است

09-08 13:19:05.224: W/System.err(30635): java.net.UnknownHostException: Unable to resolve host "192.168.1.10": No address associated with hostname
09-08 13:19:05.224: W/System.err(30635): at java.net.InetAddress.lookupHostByName(InetAddress.java:400)
09-08 13:19:05.224: W/System.err(30635): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
09-08 13:19:05.235: W/System.err(30635): at java.net.InetAddress.getAllByName(InetAddress.java:220)
09-08 13:19:05.244: W/System.err(30635): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
09-08 13:19:05.244: W/System.err(30635): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
09-08 13:19:05.244: W/System.err(30635): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
09-08 13:19:05.244: W/System.err(30635): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
09-08 13:19:05.254: W/System.err(30635): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-08 13:19:05.254: W/System.err(30635): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-08 13:19:05.254: W/System.err(30635): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-08 13:19:05.265: W/System.err(30635): at com.negahetazehco.push_notification.C2D$2.run(C2D.java:142)
09-08 13:19:05.265: W/System.err(30635): at java.lang.Thread.run(Thread.java:856)

0 0
لطفا در سوال جدید مطرح کنید ، این پاسخ حذف خواهد شد (10 سال پیش)
0 0
مشکل برطرف شد مدیران لطفا حذف کنند (10 سال پیش)
0 0
آقا طاهر بیزحمت راه حل رو هم بگو برای دوستانی که در آینده احتمالا به این مشکل بر بخورن. ممنون (10 سال پیش)
+1 0
هیچ بابا دسترسی به اینترنت رو لازم داشت که من چون از اینترنت جستجو میکردم کدش رو کپی کردم و گزاشتم که اشتباه بود (10 سال پیش)
پاسخ به سوال 
konda  9 سال پیش
0 0

سلام
طبق آموزش استاد، کاملا پیاده کردم، و همه چی حله ولی یه مشکلی برخوردم، در متد startPushNotification

      public static   void startPushNotification() {
service = new C2D()
.key("ertebatBaMa")
.url("http://192.168.1.140/note-server-s/servicePN.php")
.interval(1000)
.network(C2D.NETWORK_ALWAYS)
.listener(new C2D.Listener() {

@Override
public void onDataReceive(String data) {
Log.i("LOG", "Data: " + data);

Toast.makeText(context.getApplicationContext(),
"Data : " + data, Toast.LENGTH_SHORT).show();
}
}).start();

service.enable();
}

در onDataReceive یه Toast گذاشتم تا پیام بدهد، بعد از اجرا اصلا پیام Taost نمایش نمیده، فقط در LogCat نمایش میده!!!
چرا؟

پاسخ به سوال 
محمدرضا طبری  9 سال پیش
0 0

دوستان یک مشکل هست و اونم اینه که چرا حتمآ باید ریست بشه گوشی تا نوتیفیکیشن دریافت بشه ؟؟؟ راه حلی هست که برنامه به محض نصب شدن وقتی سرور و آپدیت کردیم نوتیفیکیشن بیاد ؟ 

0 0
از while بی نهایت استفاده کن، مثلا هر یک دقیقه یا 10 ثاینه انو چک کنه که صفر است یا یک؟ اگر یک بود پیام میاد (9 سال پیش)
0 0
میشه بگید while رو در کجای کد باید قرار بدم ؟ ممنونم در ضمن شما با این کار چک کردی درست بود ؟ (9 سال پیش)
0 0
:| استاد توی فیلم توضیح داد که شما فعلا بگید که کدی نوشتی که بعد از ریست پیام میاد، انو داخل while بزار، حله (9 سال پیش)
پاسخ به سوال 
Criss  9 سال پیش
0 0

سلام به همه

چطوری میشه بجای نمایش پکیج یک برنامه بصورت زیر

 "market://details?id="+ link

با استفاده از شناسه توسعه دهنده تمام برنامه هارو نمایش داد ؟ به این صورت

 https://cafebazaar.ir/developer/yekteam/

 

0 0
برای بازار اینطوری میشه < برای گوگل هچین چیزی داریم ؟ لینک (9 سال پیش)
پاسخ به سوال 
h_uk2009  9 سال پیش
+2 0

درجهت تکمیل این بخش و تجربه ای که من در نوشتن این بخش داشتم باید عرض کنم که پس از قطع wifi این ارتباط قطع میشه و باید این خط رو هم توی منیفست اضافه کنید تا زمانی که کاربر قطع میکنه وای فایش رو هم کار کنه و اتصال با سرور برقرار بمونه

این خطوط رو در منیفیست اضافه کنید .

                     <receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>

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