رفتن به مطلب

امیرحسین قاسمی

کاربر رو به رشد
  • تعداد ارسال ها

    241
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    35

امیرحسین قاسمی آخرین باز در روز تیر 15 برنده شده

امیرحسین قاسمی یکی از رکورد داران بیشترین تعداد پسند مطالب است !

2 دنبال کننده

مشخصات پروفایل

  • محل زندگی
    شاهین دژ
  • محل تولد
    شاهین دژ
  • علاقه مندی ها
    برنامه نویسی اندروید - هنر

آخرین بازدید کنندگان نمایه

859 بازدید کننده نمایه

دستاورد های امیرحسین قاسمی

Community Regular

Community Regular (8/14)

  • One Year In
  • Reacting Well
  • Very Popular نادر
  • Conversation Starter
  • First Post

نشان‌های اخیر

267

اعتبار در سایت

9

پاسخ های انجمن

  1. سلام، دوست عزیز اول از همه باید یک هاست اشتراکی لینوکس تهیه کنید. برای همین کاری که میخوایم انجام بدیم به قول دوست مون یک هاست 200 مگابایتی کافی هست که میتونید با پرداخت 38,000 تومان از اینجا تهیه کنید. حالا Notepad++ رو باز کنید.(اگه این نرم افزار رو ندارید با حجم 3 الی 4 مگابایت میتونید از اینجا دانلود کنید.) سپس کدهای php زیر رو در نوت پد پلاس پلاس بنویسید: <?php $Message=$_POST['Message']; ini_set( 'display_errors', 1 ); error_reporting( E_ALL ); $from = "[email protected]"; $to = "[email protected]"; $subject = "یک کاربر جدید ثبت نام کرد!"; $headers = "From:" . $from; mail($to,$subject,$Message, $headers); echo "Sent"; ?> باید در کدهای بالا دو تغییر انجام دهید: 1- در متغیر $from من عبارت [email protected] رو قرار دادم. شما باید بجای MyDomain.ir آدرس دامین خودتون رو قرار بدین.(توجه داشته باشید چیز دیگه ای بنویسید یا اصلا اطلاعات کاربر ارسال نمیشه یا اگه هم ارسال بشه، به پوشه هرزنامه میره. پس حتما آدرس دامین خودتون رو قرار بدید تا ایمیل ارسالی صحت داشته باشه و مشکلی پیش نیاد. 2- در متغیر $to به جای [email protected] ایمیل یا ترجیحا جیمیل خودتون رو بنویسید. اطلاعات کاربر به این آدرس ایمیل فرستاده خواهد شد. خب حالا این فایل متنی بالا رو با نام SendEmail و با پسوند php. ذخیره کنید و در پوشه public_html هاست خودتون آپلودش کنید.(SendEmail.php) حالا B4A رو باز می کنیم و یک پروژه جدید می سازیم. من به عنوان مثال توی دیزاینر دو تا ادیت تکست قرار دادم که اولی مربوط به شماره تلفن(EditText1) و دومی مربوط به نام و نام خانوادگی کاربر(EditText2) است و یک دکمه(Button1) هم قرار دادم تا با کلیک روی اون اطلاعات کاربر برام ایمیل بشه. Sub Button1_Click If EditText1.Text="" Or EditText2.Text="" Or EditText1.Text.Length<>11 Then ToastMessageShow("مقادیر ورودی در فیلدها معتبر نیستند",False) Return End If Private Send As HttpJob Send.Initialize("Send",Me) Private Message As String="شماره کاربر"&EditText1.Text&CRLF&"نام و نام خانوادگی کاربر:"&EditText2.Text Send.PostString("http://MyDomain.ir/SendEmail.php","Message="&Message) Wait For JobDone(job As HttpJob) If job.Success=True And job.GetString="Sent" Then ToastMessageShow("ثبت نام انجام شد",False) Else ToastMessageShow("خطایی رخ داد",False) End If End Sub در کدهای بالا در خط زیر به جای MyDomain.ir آدرس دامنه خودتون رو قرار بدین: Send.PostString("http://MyDomain.ir/SendEmail.php","Message="&Message) خب حالا هرکسی توی ادیت تکست ها اطلاعاتش رو وارد کنه و روی دکمه کلیک کنه به صورت خودکار برای شما یک ایمیل ارسال میشه. حتی میتونید با استفاده از سرویس های پیامکی و با کمی هزینه به شماره کاربر یک SMS کد فعالسازی بفرستید تا یه وقت کاربر شماره فیک وارد نکنه. البته این گزینه اجباری نیست. موفق باشید
  2. سلام مجدد، #If Java import android.content.Intent; import android.net.Uri; import android.provider.Settings; public void getPer() { Intent intent = new Intent(); intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); Uri uri = Uri.fromParts("package", this.getPackageName() , null); intent.setData(uri); startActivity(intent); } #End If Sub Button1_Click Dim jo As JavaObject jo.InitializeContext jo.RunMethod("getPer", Null) End Sub من از این قابلیت استفاده کردم و صفحه زیر باز شد: همونجوری که می بینید اون toggle button غیرفعال هست. دسترسی رو هم بدین شکل اضافه کردم به مانیفست: AddPermission(MANAGE_EXTERNAL_STORAGE) این دسترسی رو به صورت ران تایم هم گرفتم. یک نکته دیگه ای هم هست: من توی اون کد جاوا به جای this.getPackageName() پکیج نیم واتساپ و تلگرام هم قرار دادم ولی برای هیچ کدوم شون این گزینه فعال نبود و مثل تصویر بالا بازم اون دکمه اجازه دسترسی به فایل ها غیرفعال بود. در حالی که این دو برنامه به راحتی به حافظه دسترسی دارن و ازین روش استفاده نکردن و فقط دسترسی رانتایم میگیرن. من میام دقیقا همون دسترسی به حافظه رو از طریق رانتایم میگیرم مشکلی نیست اما وقتی یک فایلی میخواد توی حافظه داخلی گوشی (dirrootexternal) نوشته بشه برنامه فورس کلوز میده(در اندروید یازده) در واقع دسترسی به حافظه اعطا میشه اما هنگام کار با حافظه توی اندروید 11 فورس کلوز داده میشه. شما خودتون تو پروژه هاتون چطوری دسترسی به حافظه رو میگیرن؟ توی اندروید 11 و 12 کار می کنن؟ لطفا راهنمایی کنید. ممنون
  3. سلام دوست عزیز، این رو امتحان نکردم ولی به هرحال می گم شاید به دردتون بخوره: شما باید یک پنل رو به عنوان parent قرار بدین توی اکتویتی و متن داخل اون حرکت کنه. حالا باید از پنل هر لحظه مدام اسکرین شات گرفته بشه. (میتونید از تاپیک زیر برای اینکار کمک بگیرین) : حالا میتونید اسکرین شات هارو کنار هم قرار بدین و یک ویدیو بسازین و بعدا اون ویدیو رو به gif تبدیل کنین. (برای اینکار هم میتونین از جستجوی انجمن و همچنین منابع انگلیسی و سایت مرجع کمک بگیری) موفق باشید
  4. ابتدا کتابخانه HttpUtils2 را تیک می زنیم. Private Download_Json As HttpJob Download_Json.Initialize("Download_Json" , Me) Download_Json.Download("http://MyDomain.ir/1.php")'لینک فایل پی اچ پی را در اینجا جایگزین کنید Wait For (j) JobDone(j As HttpJob) If j.Success Then Log(j.GetString)'چاپ جیسون دریافت شده در بخش لاگ End If سپس یک متغیر از کلاس HttpJob تعریف می کنیم. متغیر را initialize می کنیم و سپس متد Download را صدا می زنیم که یک پارامتر ورودی از نوع string لازم دارد که در آن لینک فایل php که حاوی کدهای واکشی اطلاعات از دیتابیس و تبدیل آن به جیسون است رو قرار می دهیم. اگر اینترنت کاربر وصل باشد بلافاصله با فراخوانی متد Download عملیات دریافت جیسون آغاز می شود. برای بررسی نتیجه دانلود من از قابلیت Wait For استفاده کرده ام اما شما میتوانید از تابع زیر نیز استفاده کنید که درواقع نتیجه دانلود به آن Call Back داده می شود: Sub JobDone(job As httpjob) End sub در نهایت با دستور Log جیسون را چاپ می کنیم حالا شما میتونید مثلا توی یک Msgbox هم j.GetString را قرار دهید. برای تجزیه جیسون نیز از کتابخانه Json استفاده کنید. حالا ببخشید اینقدر توضیح دادم کلا دست خودم نیست باید همه چیو توضیح بدم موفق باشید
  5. همانگونه که در B4A از کتابخانه httputils2 برای ارتباط با سرور استفاده کرده ایم در اندروید استودیو نیز باید از کتابخانه Retrofit استفاده کنیم! این آموزش رو هم دقت بفرمایید حدود ۲۰ روز پیش نوشتم و هیچی عوض نشده.
  6. سلام، من در این مورد قبلا تاپیک زدم و آموزش دادم. لطفا ملاحظه کنید: البته این برای B4a هست اما سمت سرور که فرقی نمی کنه و شما از کلاینت یک ریکوئست میزنی سرور و نتیجه برمی گرده. در کل این آموزش بالا خیلی میتونه مفید باشه. موفق باشید
  7. سلام، اضافه شد میتونید دریافت کنید: https://s19.picofile.com/file/8438289584/Azan.zip.html
  8. سلام، به احتمال زیاد کتابخونه ای که تو اون پروژه استفاده شده رو ندارید یا اینکه احتمالا مشکل از SDK تون باشه. البته علت های زیادی میتونه داشته باشه اما این دوتا احتمالش بیشتره چون مسلما اون پروژه تو یک سیستم دیگه توسعه داده شده و با یک SDK احتمالا متفاوت بیلد و تست شده است‌.
  9. سلام، دوست عزیز کدهای php تون هیچ مشکلی ندارن. کدهای سمت کلاینت هم ظاهرا مشکلی نداره. بعد از اجرا شدن تابع Sendfile باید یک فایلی به نام filename در پوشه public html هاست تون بیاد. منتهی شما جهت اطمینان بیشتر توی لینک اسم فایل رو به فایل php بفرستید چون داخل php نام فایلی که قراره ذخیره بشه با GET گرفته میشه. ولی بازم فکر نکنم ربطی داشته باشه چون توی فایل php گفته اگه متغیری که با GET مقداردهی میشه خالی بود فایل رو با اسم Filename ذخیره کن‌. آخرسر به قول دوست مون فکر کنم مشکل از هاست رایگان باشه چون هاست های رایگان نمیتونن php رو پردازش کنن. شما یا از یک سرور خانگی استفاده کنید برای تست و کارآموزی یا اینکه یک هاست با حجم و پهنای کم برای تست خودتون بخرید که هزینه گزافی هم برنمیداره. موفق و پیروز باشید🌹
  10. سلام مجدد، خواهش می کنم دوست عزیز بله این امکان هم وجود داره. منتهی شما باید اطلاعات شهر رو توی یک فایل txt ذخیره کنید و برنامه هر بار هنگام ورود به برنامه چک کنه آیا این فایل txt هست یا نه! اگه فایل نبود یعنی کاربر تازه وارد شده و باید تنظیم کنه در غیر اینصورت از این بخش باید رد بشه و اذان مطابق طول و عرض جغرافیایی که توی فایل txt هست تنظیم بشه. البته این فایل txt یک راه ساده هست و راه های استانداردی مثل دیتابیس هم وجود داره. خودتون سعی کنید پیاده کنید اگه احیانا نتونستید اطلاع بدید این قابلیت رو به سورس اضافه کنم. بازم ممنون بابت بازخوردتون
  11. سلام دوست عزیز، من خودم تا به حال به چنین باگی برنخورده بودم. تو استک اورفلو سرچ زدم ظاهرا به دیالوگ یا همون Msgbox مربوطه. البته ممکنه مشکل از یه چیز دیگه هم باشه. بستگی به این داره از نسخه چندم B4A استفاده می کنید و SDK تون کامل هست یا نه! امیدوارم بقیه اساتید هم کمکی کنن.
  12. ببخشید میشه یک سورس پیوست کنید؟ البته اگه زحمتی نباشه🌹
  13. سلام، دوستان من با متد WriteString یک فایل TXT در حافظه داخلی ایجاد می کنم و بعد یک سری عملیات روی اون انجام میدم. دسترسی حافظه رو هم با Runtime می گیرم و در اندروید 7 همه چی درست کار می کنه اما تو اندروید 11 برنامه فورس کلوز میده: main_ok_click (java line: 515) java.io.FileNotFoundException: /storage/emulated/0/CreateProject.txt: open failed: EPERM (Operation not permitted) at libcore.io.IoBridge.open(IoBridge.java:492) at java.io.FileOutputStream.<init>(FileOutputStream.java:236) at anywheresoftware.b4a.objects.streams.File.OpenOutput(File.java:449) at anywheresoftware.b4a.objects.streams.File.WriteString(File.java:264) at com.AndroAppino.main._ok_click(main.java:515) at java.lang.reflect.Method.invoke(Native Method) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:197) at anywheresoftware.b4a.BA.raiseEvent(BA.java:193) at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80) at android.view.View.performClick(View.java:8160) at android.widget.TextView.performClick(TextView.java:16222) at android.view.View.performClickInternal(View.java:8137) at android.view.View.access$3700(View.java:888) at android.view.View$PerformClick.run(View.java:30236) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8512) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) Caused by: android.system.ErrnoException: open failed: EPERM (Operation not permitted) at libcore.io.Linux.open(Native Method) at libcore.io.ForwardingOs.open(ForwardingOs.java:166) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254) at libcore.io.ForwardingOs.open(ForwardingOs.java:166) at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8373) at libcore.io.IoBridge.open(IoBridge.java:478) ... 21 more این هم لاگ فورس کلوز در اندروید 11 هست. target رو روی 26،29 و 30 هم گذاشتم فرقی نکرد. کد زیر رو هم به منیفست اضافه کردم بازهم در اندروید 11 فورس کلوز میده: SetApplicationAttribute(android:requestLegacyExternalStorage,"true") مشکل دقیقا از چیه؟ لطفا راهنمایی کنید، ممنونم
  14. سلام، ابتدا باید با دو اصطلاح آشنا شویم: 1-statusbar: نواری در اندروید است که معمولا در بالاترین بخش صفحه نمایش قرار دارد و ابزارهایی مثل نمایشگر درصد باتری، ساعت، آیکون اعلانات و... در آن قرار می گیرند. 2-navigation bar: نواری در اندروید است که معمولا در پایین ترین بخش صفحه قرار دارد و دکمه های Back، Home و Recent در آن قرار دارند. توجه داشته باشید که FullScreen# فقط مربوط به statusbar و IncludeTitle# هم فقط برای تایتل(تیتر پیشفرض بالای برنامه) است. بنابراین ما برای پنهان کردن navigation bar باید به شکلی دیگر عمل کنیم(در اینجا از یک روش کاملا استاندارد استفاده می کنیم) : ابتدا دو کتابخانه Phone و JavaObject را تیک بزنید. یک متغیر به نام Mainpanel از نوع panel در Globals تعریف کنید. بدین شکل: Private MainPanel As Panel حال دو sub زیر را به اکتویتی خود اضافه کنید: Sub GetRealSize As LayoutValues Dim lv As LayoutValues Dim p As Phone If p.SdkVersion >= 17 Then Dim ctxt As JavaObject ctxt.InitializeContext Dim display As JavaObject = ctxt.RunMethodJO("getSystemService", Array("window")).RunMethod("getDefaultDisplay", Null) Dim point As JavaObject point.InitializeNewInstance("android.graphics.Point", Null) display.RunMethod("getRealSize", Array(point)) lv.Width = point.GetField("x") lv.Height = point.GetField("y") Dim window As JavaObject = ctxt.RunMethod("getWindow", Null) Dim rect As Rect rect.Initialize(0, 0, 0, 0) window.RunMethodJO("getDecorView", Null).RunMethod("getWindowVisibleDisplayFrame", Array(rect)) MainPanel.SetLayoutAnimated(0, 0, rect.Top, lv.Width, lv.Height - rect.Top) Log(100%y & ", " & lv.Height) Else lv.Width = 100%x lv.Height = 100%y End If lv.Scale = 100dip / 100 Return lv End Sub Sub Activity_WindowFocusChanged(HasFocus As Boolean) If HasFocus Then Try Dim jo As JavaObject = Activity Sleep(300) jo.RunMethod("setSystemUiVisibility", Array As Object(4866)) Catch End Try End If End Sub هرکجا که بخواهیم navigation bar پنهان شود باید این کدها را قرار دهیم(ترجیحا در Activity_Create قرار دهید تا در لحظه اجرای اکتویتی navigation bar پنهان شود) : Activity_WindowFocusChanged(True) MainPanel.Initialize("") Dim lv As LayoutValues = GetRealSize Dim jo As JavaObject = Activity jo.RunMethod("setBottom", Array(lv.Height)) jo.RunMethod("setRight", Array(lv.Width)) Activity.Height = lv.Height Activity.Width = lv.Width Activity.AddView(MainPanel, MainPanel.Left, MainPanel.Top, MainPanel.Width, MainPanel.Height) MainPanel.LoadLayout("Layout") 'در اینجا لایوت خود را در اکتویتی بدین شکل لود کنید نکته: برای پنهان شدن navigation bar باید نسخه اندروید کاربر بالاتر از 4.2 یا برابر با خود 4.2 باشد در غیر اینصورت فقط navigation bar پنهان نخواهد شد و هیچ فورس کلوزی رخ نخواهد داد زیرا از یک دستور شرطی استفاده کردیم و گفتیم که اگر SDKVersion کاربر برابر یا بالاتر از 17 بود دستورات را برای پنهان کردن navigation bar اجرا کن. نکته: پس از پنهان شدن navigation bar حتی اگر کاربر خودش navigation bar را به سمت بالا بکشد و آن را ظاهر کند، پس از چند ثانیه navigation bar دوباره پنهان خواهد شد. موفق باشید.
  15. سلام، قبل از رفتن به اکتویتی بعدی برای توقف عملیات دانلود از کد زیر استفاده کنید: job.Release به جای job نام متغیری که به عنوان httpjob تعریف کرده اید قرار دهید. فراخوانی متد Release عملیات آپلود و دانلود(کل فرایندهای httpjob) را متوقف می کند. موفق باشید
×
×
  • اضافه کردن...