PDA

View Full Version : آپدیت یک ویجت بر اساس یک Listener



Arashdn
شنبه 01 شهریور 1393, 15:48 عصر
سلام
چطور میشه یه ویجت رو وقتی آپدیت کرد که یه Listener چیزی تعریف کنه؟
مثلا هر موقع یه متد از PhoneStateListener توسط آندروید اجرا شد ٬ ویجت هم آپدیت بشه؟
اگه بخوام با سزویس ها انجامش بدم ٬ دقیقا باید چجوری باشه؟
بدون سرویس هم میشه؟
ممنون

Arashdn
چهارشنبه 05 شهریور 1393, 18:40 عصر
کسی نیست راهنمایی کنه؟

diapason
چهارشنبه 05 شهریور 1393, 19:24 عصر
اینو امتحان نکردم، ولی احتمالاً جواب بده.
اکشن android.intent.action.PHONE_STATE رو به intent-filter رسیور ویجت اضافه کنید تا با تغییر وضعیت تلفن، ویجت شما broadcast رو دریافت کنه. intent-filter یک اکتیویتی، رسیور یا .. می‌تواند چند اکشن داشته باشد.
در تابع onRecieve ویجت هر تغییری خواستید بر روی ویجت بدید.

Arashdn
چهارشنبه 05 شهریور 1393, 20:59 عصر
اینو امتحان نکردم، ولی احتمالاً جواب بده.
اکشن android.intent.action.PHONE_STATE رو به intent-filter رسیور ویجت اضافه کنید تا با تغییر وضعیت تلفن، ویجت شما broadcast رو دریافت کنه. intent-filter یک اکتیویتی، رسیور یا .. می‌تواند چند اکشن داشته باشد.
در تابع onRecieve ویجت هر تغییری خواستید بر روی ویجت بدید.
نمیدونم من کد ها رو درست ننوشتم یا ایده درست جواب نداد ، ولی به هر حال کار نکرد

ممکنه بیشتر توضیح بدید و اگه مقدور بود کدش رو بزارید؟
ممنون

diapason
پنج شنبه 06 شهریور 1393, 01:22 صبح
خواهش می‌کنم:
برای مثال ویجتی که وضعیت بلوتوث رو نشون میده... اگه روشن باشه، on و اگه خاموش باشه off رو نشون میده
بخش‌هایی که مربوط به سوال شما میشه:
در مانیفست اکشن‌های مورد نظر به ویجت اضافه میشن
<receiver
android:name="com.example.widget_test_app.MyWidgetProvider"
android:label="widget" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_info" />
</receiver>


و تابع onReceive در کلاس MyWidgetProvider که AppWidgetProvider رو گسترش داده:
Intent intent2 = new Intent(context, MyWidgetProvider.class);
intent2.setAction(AppWidgetManager.ACTION_APPWIDGE T_UPDATE);
int[] widgetIds = AppWidgetManager.getInstance(context).getAppWidget Ids(new ComponentName(context, MyWidgetProvider.class));
intent2.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ IDS, widgetIds);
context.sendBroadcast(intent2);


در onReceive یک اینتنت تعریف شده که برودکست میشه تا دوباره تابع onUpdate فراخوانی بشه.
کد گذاشته شده رو بررسی کنید، متوجه میشید. اگه باز هم مشکلی بود، در خدمتم.

پ.ن. برای خودمم جالب بود :)
پ.ن2: نمیدونم چرا داخل کد، بین بعضی از کاراکترها فاصله ایجاد شده!