mahditofighi

ساخت سرویس و اجرای دائم آن

8 ارسال در این موضوع قرار دارد

سلام دوستان

من می خوام سرویسی بنویسم که دارای یک اکتیوتی جهت انجام تنمظیمات و دخیره آن در دیتابیس هست .

حالا چندتا سوال دارم :

1 - اصولا برای نوشتن یه سرویس چه کار باید کرد ؟ ( این سرویس هم می خواد sms های ورودی رو چک کنه ، هم می خواد هر چند دقیقه یکبار به اینترنت وصل شه و داده بفرسته )

2 - چطوری هم یه سرویس داشته باشم ، هم یه اکتیویتی برای تنظیمات ؟

3 - می خوام بعد از اینکه تنظیمات رو انجام داد ، با زدن یه دکمه سرویس رو run کنه و تا زمانیکه سرویس رو stop نکرده سرویس اجرا بشه ؟ ( حتی بعد از ریبوت شدن گوشی اگه سرویس قبل ریبوت run بوده ، دوباره run بشه )

میدونم سوالام زیاد شد ، اما فکر می کنم این موضوع مهمیه که تا حالا تو تالار بهش نپرداختیم و فکر می کنم واسه همه مفید باشه .

امیدوارم با همراهیه هم به نتیجه برسیم .

ممنون

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

من بطور خلاصه جواب سوالاتتون رو مینویسم :

1- خب برای اینکار باید یک کلاس بنویسید که از BroadcastReciver ارث بری کند، تا برنامه شما همیشه در پس زمینه در حال اجرا باشد. در پروژه برنامه SMS که در هدایای نوروزی موجود میباشد  اینکار پیاده سازی شده است.همچنین باید در مانیفست به عنوان یک  Reciver آن را تعریف کنید.

public class MyAlarmReceiver extends BroadcastReceiver{   @Override   public void onReceive(Context context, Intent intent)   {       Toast.makeText(context, "Alarm Received....", Toast.LENGTH_SHORT).show();   }}

2-سوال دوم ) شما یک اکتیویتی بسازید که تنظیمات در آن ذخیره شود مثلا دیتابیس یا ... سپس در اون کلاس سرویس اطلاعات رو fetch کنید تا همیهش برنامه در حال اجرا باشد.

مثلا :این کد هر یک دقیقه یکبار اجرا خواهد شد

    Intent intent = new Intent(this,                        Service_class.class);                PendingIntent pintent = PendingIntent.getService(                        this, 0, intent, 0);                AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);                alarm.setRepeating(AlarmManager.RTC_WAKEUP,                        cal.getTimeInMillis(), 60000, pintent);

3- برای اینکار میتوانید از مثال این سایت استفاده کنید :

 http://www.sschauhan.com/index.php?option=com_content&view=article&id=21:creating-servi

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

خیلی ممنون از پاسخ کاملتون

چیزی که من متوجه شدم اینه که ، باید یه اکتیویتی طبق روال معمول بسازم برای تنظیمات ، یه سرویس بنویسیم برای اتصال به اینترنت و یه BroadcastReciver برای دریافت sms ، درسته ؟

اون تابعی که هر یک دقیقه یکبار اجرا میشه ، باید توی سرویس بنویسم ؟

سرویس هم مثل BroadCastReciver  همیشه در حال اجرا در بگراند است ؟

شنیدم دستورات داخل BroadCastReciver اگه بیشتر 5 ثانیه اجراش طول بکشه ، برنامه forceclose میده ، درسته ؟ ( اگه آره ، راه حلش چیه؟ )

ممنون

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ممنون میشم در مورد سوالات بالا به من توضیح بدید .

امشب می خوام پروژه ای رو شروع کنم که به این اطلاعات نیاز دارم .

ممنون

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

این کد برنامه منه که قراره در Background اجرا بشه و هر پنج دقیقه یکبار اطلاعاتی را به یک وب سرویس saop ارسال کنه ، برنامه خطایی نداره اما بعد از نصب روی گوشی هیچ کاری انجام نمیده ، لطف می کنید بررسی کنید ؟

package com.example.sendgpspointtosite;import java.lang.reflect.Method;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.provider.Settings;import android.telephony.TelephonyManager;import android.util.Log;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;public class SendGpsPoint extends BroadcastReceiver{        private static String SOAP_ACTION1 = "http://tempuri.org/InsertFromMobile";   private static String NAMESPACE = "http://tempuri.org/";   private static String METHOD_NAME1 = "InsertFromMobile";   private static String URL = "http://gps.mashhad-cinema.ir/Services/GPSPointWS.asmx?WSDL";    private static String IMEI;    private static String GeographicLenght;    private static String WidthLenght;    private static String Height;    private static String Speed;    private static String Direction;    private Context ctext;      public void onReceive(Context context, Intent intent) {            // TODO Auto-generated method stub        final Handler handler = new Handler();       final Thread r = new Thread() {           public void run() {                   toggleGPS(true);               GetGpsLocation();               handler.postDelayed(this, 120000);               turnData(true);               handler.postDelayed(this, 30000);               TelephonyManager tManager = (TelephonyManager)ctext.getSystemService(Context.TELEPHONY_SERVICE);               IMEI = tManager.getDeviceId();               insertToHostDataBase();               toggleGPS(false);               turnData(false);               handler.postDelayed(this, 300000);           }       };        r.start();   }          private void insertToHostDataBase()    {        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);              //Use this to add parameters       request.addProperty("IMEI",IMEI.toString());       request.addProperty("GeographicLenght",GeographicLenght.toString());       request.addProperty("WidthLenght",WidthLenght.toString());       request.addProperty("Height",Height.toString());       request.addProperty("Speed",Speed.toString());       request.addProperty("Direction",Direction.toString());       //Declare the version of the SOAP request       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);       envelope.setOutputSoapObject(request);       envelope.dotNet = true;       try {             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);              //this is the actual part that will call the webservice             androidHttpTransport.call(SOAP_ACTION1, envelope);             // Get the SoapResult from the envelope body.             SoapObject result = (SoapObject)envelope.bodyIn;             if(result != null)             {                   //Get the first property and change the label text             }             else             {             }       } catch (Exception e) {       }    }        private void GetGpsLocation()    {        try{            LocationManager locationManager = (LocationManager)ctext.getSystemService(Context.LOCATION_SERVICE);                 final boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.  GPS_PROVIDER);                 if (gpsEnabled) {                //request for location updates                LocationListener locationListener = new MyLocationListener();                     locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 10000, 0, locationListener);                     Location myLocation;                     myLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);                     if(myLocation != null)                {                    //we have a location!!                    GeographicLenght =     Location.convert(myLocation.getLatitude(), Location.FORMAT_DEGREES);                    WidthLenght = Location.convert(myLocation.getLongitude(), Location.FORMAT_DEGREES);                    Height = Location.convert(myLocation.getAltitude(), Location.FORMAT_DEGREES);                    Speed = Float.toString(myLocation.getSpeed());                     Direction = "Unknow";                }                 }            }            catch(Exception e)            {            }    }        public class MyLocationListener implements LocationListener   {   public void onLocationChanged(Location location) {       location.getLatitude();       location.getLongitude();       // TODO get accuracy, direction and speed.   }   public void onStatusChanged(String provider, int status, Bundle extras) {       // TODO Auto-generated method stub   }   public void onProviderDisabled(String provider) {       // TODO Auto-generated method stub   }   public void onProviderEnabled(String provider) {       // TODO Auto-generated method stub   }   }        private void toggleGPS(boolean enable) {        String provider = Settings.Secure.getString(ctext.getContentResolver(),             Settings.Secure.LOCATION_PROVIDERS_ALLOWED);        if(provider.contains("gps") == enable) {            return; // the GPS is already in the requested state        }        final Intent poke = new Intent();        poke.setClassName("com.android.settings",             "com.android.settings.widget.SettingsAppWidgetProvider");        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);        poke.setData(Uri.parse("3"));        ctext.sendBroadcast(poke);    }        void turnData(boolean ON)    {        try{             Method dataConnSwitchmethod;            Class telephonyManagerClass;            Object ITelephonyStub;            Class ITelephonyClass;            TelephonyManager telephonyManager = (TelephonyManager) ctext.getSystemService(Context.TELEPHONY_SERVICE);            telephonyManagerClass = Class.forName(telephonyManager.getClass().getName());        Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony");        getITelephonyMethod.setAccessible(true);        ITelephonyStub = getITelephonyMethod.invoke(telephonyManager);        ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName());        if (ON) {             dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("enableDataConnectivity");         } else {            dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("disableDataConnectivity");        }        dataConnSwitchmethod.setAccessible(true);        dataConnSwitchmethod.invoke(ITelephonyStub);        }catch(Exception e){              Log.e("Error:",e.toString());        }    }}

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

فرزاد جان اینطور که من میبینم این مسئله سرویس و اجرا در background برای خیلی از بچه ها سواله .

اگه ممکنه یه آموزش کامل در این مورد بزار .

ممنون

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

کاربر عزیز بله، در طی ماه مبارک رمضان آموزش های جامعی منتشر خواهد شد. این مبحث را نیز پوشش خواهیم داد.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوستان من یه مشکل دارم اونم اینه که میخام برنامه ای بنویسم که با دریافت پیامکی با یه کد تعریف شده شروع به بوق زدن کنه و پیغامی نمایش بده و تا کاربر دکمه تاییدشو نزنه بوش قطع نشه لطفا راهنمایی کنید من نرم افزارو نوشتم ولی کار بالارو نمیکنه.فقط لوکیشنو میگیره و میفرسته به همون فرستنده پیامک

با این فرض که این بوقم تو خود برنامه در پوشه raw داریم و اسمش music_1 هست

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری