PDA

View Full Version : Context



pouya1999best@g
چهارشنبه 25 تیر 1393, 16:07 عصر
سلام دوستان؛
من یک دریافت کننده شماره تلفن و متن پیامک دارم که اونا رو باید توی Alert Dialog نشون بده؛


package ir.home.receiversms;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class IncomingSms extends BroadcastReceiver{
String str;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
str = "";
if (bundle != null){
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str += "SMS from " + msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";}
AlertDialog ad = new AlertDialog.Builder(context).create();
ad.setMessage(str);
ad.show();}}}



همون طور که میدونیم باید در context آلرت دیالوگ،this قرار بگیره؛
اما به دلیل وجود Context contect در ابتدای متد onReceive دیگه به من اجازه قرار دادن this رو نمیده و من مجبورم از context استفاده کنم.
و طبق معمول با فورس کلوز مواجه میشم:افسرده:
آیا راه حلی برای این مشکل وجود دارد؟؟؟

amin_nez
چهارشنبه 25 تیر 1393, 16:38 عصر
شما اجازه نمایش AlertDialog در BroadcastReceiver رو ندارید!!!!
AlertDialog فقط برای Activity هاست.

pouya1999best@g
چهارشنبه 25 تیر 1393, 16:40 عصر
چطور Toast ها قابل نمایش اند؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

pouya1999best@g
چهارشنبه 25 تیر 1393, 16:43 عصر
یه برنامه توی بازار هست به اسم"پیام تازه"
وقتی پیام جدید میاد اونم یه Alert Dialog میسازه.

pouya1999best@g
چهارشنبه 25 تیر 1393, 16:45 عصر
خب چکار کنم؟؟؟؟؟

amin_nez
چهارشنبه 25 تیر 1393, 17:01 عصر
چطور Toast ها قابل نمایش اند؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

Toast با AlertDialog تفاوت داری.هر گردی ای که گردو نیست!
طبق دو مرجع پایین شما اجازه نمایش AlertDialog توی BroadcastReceiver رو ندارید.
مرجع 1 (http://stackoverflow.com/questions/8766739/show-an-alert-dialog-in-broadcast-receiver-after-a-system-reboot) * مرجع 2 (http://stackoverflow.com/questions/3432601/alertdialog-in-broadcastreceiver)

pouya1999best@g
چهارشنبه 25 تیر 1393, 17:22 عصر
یعنی هیچ راهی نیست؟؟؟؟

smemamian
چهارشنبه 25 تیر 1393, 18:07 عصر
یعنی هیچ راهی نیست؟؟؟؟

شما بجای Dialog از یک Activity استفاده کنید و هنگامی که در Manifest دارید
activity رو معرفی می کنید Theme اون رو به دیالوگ تغییر بدین :

<activity android:theme="@android:style/Theme.Dialog" />

smemamian
چهارشنبه 25 تیر 1393, 18:12 عصر
یه برنامه توی بازار هست به اسم"پیام تازه"
وقتی پیام جدید میاد اونم یه Alert Dialog میسازه.

من برنامه رو ندیدم ولی:
کار اشتباه رو نباید ازش تعریف کرد. این روش کاربرپسند نیست و
از نظر طراحی UI به هر طراح UI بگین بهتون می خنده.

در این موارد از Notificationها استفاده میشود.

(استثنا: در برنامه های امنیتی)