رفتن به مطلب

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

کاربر فعال
  • تعداد ارسال ها

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

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

  • روز های برد

    122

تمامی مطالب نوشته شده توسط امیرحسین قاسمی

  1. سلام و عرض ادب خدمت همه دوستان عزیز توی اندروید امکان ساخت وای فای جعلی وجود داره؟
  2. سلام من به این شکل بخشی از متن یک لیبل رو رنگی و همچنین قابل کلیک میکنم: #If java import android.graphics.Color; import android.text.SpannableStringBuilder; import android.text.Spannable; import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.view.View; import android.widget.TextView; import android.widget.Toast; import android.text.method.LinkMovementMethod; public static void makeTextViewClickable(TextView textView, int color, String metaChar) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(textView.getText()); String text = textView.getText().toString(); int startIndex = text.indexOf(metaChar) + 1; int endIndex = text.indexOf(metaChar, startIndex); String extractedText = text.substring(startIndex, endIndex); int start = textView.getText().toString().indexOf(extractedText); int end = start + extractedText.length(); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(widget.getContext(), "کلیک شد", Toast.LENGTH_SHORT).show(); } }; spannableStringBuilder.setSpan(clickableSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); spannableStringBuilder.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); int index = spannableStringBuilder.toString().indexOf("$"); while (index >= 0) { spannableStringBuilder.replace(index, index + 1, ""); index = spannableStringBuilder.toString().indexOf("$", index); } textView.setText(spannableStringBuilder); textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setHighlightColor(Color.TRANSPARENT); } #End If از تابع بالا به این شکل استفاده میکنم: Dim jo As JavaObject jo.InitializeContext jo.RunMethod("makeTextViewClickable",Array(Label10,Colors.Red,"$")) همه چی به درستی کار میکنه اما پایین متن قابل کلیک شده یه خط ایجاد میشه: من چطوری میتونم این زیرخط رو حذف کنم؟
  3. لطفا تصویر زیر رو ببینید: اندازه متن از اندازه EditText بیشتره و این باعث شده که نصف متن داخل EditText نمایش داده نشه! الان توی دستگاهی با صفحه نمایش بزرگتر (مثلا تبلت ها) ممکنه مشکلی وجود نداشته باشه چون به مراتب EditText هم بزرگتر میشه و متن کامل نمایش داده میشه اما توی گوشی ها و صفحه نمایش های کوچیک چنین اتفاقی رخ میده. برای لیبل راه حل وجود داره که توی همه دستگاه ها متن داخلش فیت بشه اما برای ادیت تکست چیزی پیدا نکردم!
  4. همه اینارو قبلا تست کردم این روش همیشه جواب نمیده و مشکل داره
  5. ممنونم از راهنماییتون، اما این کد شما برای لیبل هست نه ادیت تکست!!
  6. سلام، برای اینکه سایز متن داخل ادیت تکست با ارتفاع ادیت تکست هماهنگ بشه به طوری که بیرون نزنه چه راه استانداردی هست؟ EditText1.TextSize=40 الان ممکنه توی تبلت ها متن داخل ادیت تکست فیت باشه اما توی گوشی ها از بالا و پایین بیرون بزنه!
  7. امیرحسین قاسمی

    پایان سال 1402

    سلام به همه رفقای انسرسنتری خب ما اومدیم تهِ یه سالِ دیگه! سالی که پر بود از بالا و پایین، از خنده و اشک، از موفقیت و شکست، از تجربه‌های جدید و درس‌های آموزنده. با نزدیک شدن به جشن باستانی نوروز و آغاز سال نو، فرصتی دیدم تا به شما عزیزان پیشاپیش سال نو را تبریک بگویم و برایتان سالی پربرکت، شاد و پر از سلامتی آرزو کنم امیدوارم سال 1403 برای همه ما سالی سرشار از موفقیت، پیشرفت و شادکامی باشه. سالی که در آن شاهد رشد و شکوفایی روزافزون تک تک مردم دوست داشتنی ایران به خصوص دوستان گل انسرسنتر باشیم. حالا وقتشه که یه نفس عمیق بکشیم، به سال گذشته نگاه کنیم و از تجربه‌هامون درس بگیریم. بیاین توی این تاپیک، خاطرات، تجربیات و اتفاقاتِ سالِ 1402 رو با هم به اشتراک بذاریم. بگیم که این سال چطور گذشت، چه چالش‌هایی داشتیم، چه موفقیت‌هایی کسب کردیم، چه درس‌هایی از این سال گرفتیم و برای سال 1403 چه برنامه‌هایی داریم! مطمئنم که خوندنِ خاطراتِ شما، برای بقیه رفقای انسرسنتری هم جذاب و آموزنده خواهد بود.
  8. وقتی عکس لود شد باید اندازه ایمیج ویو تنظیم بشه
  9. بسیار خب ممنونم از راهنماییتون. الان درست شد و glide_onResourceReady فراخوانی شد. اما اگه چندتا ImageView داشتیم چیکار کنیم؟ For i= 0 To 9 Dim img As ImageView img.Initialize("o") Activity.AddView(img,40%x,i*10%y,10%x,10%y) glide.With("glide").asBitmap.load("https://www.w3schools.com/w3css/img_lights.jpg").intoTarget Next وقتی ساب glide_onResourceReady صدا زده شد ما نمیدونیم که این تصویر (resource) برای کدوم ImageView هست!
  10. اینبار ساب glide_onResourceReady همون دفعه اولم صدا زده نشد: Sub Globals Dim glide As PersianGlide Dim img As ImageView End Sub Sub Activity_Create(FirstTime As Boolean) img.Initialize("o") Activity.AddView(img,30%x,40%x,40%x,40%y) glide.With("glide").asBitmap.load("https://www.w3schools.com/w3css/img_lights.jpg").into(img) End Sub Sub glide_onResourceReady(resource As Object) Log("onResourceReady") End Sub
  11. سلام من به این شکل از Amir Glide برای لود تصویر استفاده میکنم: Dim kj As Amir_GlideRequestOptions Dim kr As Amir_GlideTransformation Dim Glide As Amir_Glide Glide.Load("https://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Rotating_earth_%28large%29.gif/200px-Rotating_earth_%28large%29.gif").Apply(kj.Transform(kr.RoundedCorners(10,0dip)).Placeholder(bd)).Listener("mGlide",Null).Into(imageView) Sub mGlide_onResourceReady(Data As Object,Model As Object,DataSourceName As String,isFirstResource As Boolean) As Boolean Log("Resource Ready") End Sub وقتی که برنامه رو برای اولین بار اجرا میکنم و تصویر لود میشه بدون هیچ مشکلی ساب mGlide_onResourceReady صدا زده میشه. اما اگه ایمیج ویو رو Remove کنم و همین عملیات رو مجدد انجام بدم ساب mGlide_onResourceReady صدا زده نمیشه و همچنین تصویر هم لود نمیشه! اما اگه اپلیکیشن رو باز و بسته کنم درست میشه! من فکر میکنم مشکل از سیستم cache گلاید باشه. cache خودکار رو غیرفعال کردم برای بار دوم و سوم درست شد اما بار چهارم که ایمیج ویو رو Remove کردم و دوباره ساختم باز تصویر لود نشد! (البته من میخوام cache فعال باشه) کسی دقیقا میدونه دلیل این مشکل چیه؟
  12. سلام ابتدا کتابخونه های JavaObject و RuntimePermissions رو تیک بزنین. سپس توابع زیر رو به پروژه خودتون اضافه کنید: Sub startRecording(FilePath As String) Dim jo As JavaObject jo.InitializeContext jo.RunMethod("startRecording",Array(FilePath)) End Sub Sub stopRecording Dim jo As JavaObject jo.InitializeContext jo.RunMethod("stopRecording",Null) End Sub Sub IsRecording As Boolean Dim jo As JavaObject jo.InitializeContext Return jo.RunMethod("IsRecording",Null) End Sub #If java import android.media.MediaRecorder; private MediaRecorder mediaRecorder; boolean mRecording = false; public void startRecording(String outputFile) { mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mediaRecorder.setOutputFile(outputFile); try { mRecording=true; mediaRecorder.prepare(); mediaRecorder.start(); } catch (Exception e) { e.printStackTrace(); } } public void stopRecording() { if (mediaRecorder != null) { try { mRecording=false; mediaRecorder.stop(); mediaRecorder.release(); } catch (Exception e) { e.printStackTrace(); } } } public boolean IsRecording() { return mRecording; } #End If در B4A به این شکل از کد جاوای شما استفاده میکنیم: Sub Button1_Click If IsRecording=False Then Dim r As RuntimePermissions r.CheckAndRequest(r.PERMISSION_RECORD_AUDIO) Wait For Activity_PermissionResult (Permission As String, Result As Boolean) If Result=False Then ToastMessageShow("مجوز دسترسی به میکروفون داده نشد",False) Button1_Click Return End If startRecording(File.DirInternal&"/1.mp3") ToastMessageShow("شروع ضبط ...",False) Else stopRecording ToastMessageShow("فایل ذخیره شد، برای پخش کلیک کنید و نگه دارید",False) End If End Sub Sub Button1_LongClick Dim MP As MediaPlayer MP.Initialize2("MP") MP.Load(File.DirInternal, "1.mp3") MP.Play End Sub اضافه کردن کد زیر به Manifest فراموش نشود: AddPermission(android.permission.RECORD_AUDIO)
  13. سلام وقتی برنامه کامپایل میشه کدها و کلاس های برنامه توی یه بسته ای به فرمت dex قرار میگیرن. به زبان ساده وقتی که کدهای پروژه زیاد باشه توی یه فایل dex جا نمیشه و باعث به وجود اومدن همین ارور شما میشه. حالا راه حل چیه؟ کلاس ها و کدهای پروژه باید توی دوتا فایل dex یا بیشتر بسته بندی بشن که با کد زیر به کامپایلر اجازه میدیم این کار رو انجام بده: #MultiDex: True
  14. سلام تفاوت این نسخه با نسخه قبلی چی هست؟ من برای برنامه خودم چند روز قبل با نسخه قدیمی کتابخونه آپدیت دادم. ممکنه مشکلی پیش بیاد؟
  15. آقای شاهپیری دستتون درد نکنه این مشکل رو دقیق تر بررسی کنین خیلی ممنون میشم.
  16. به عنوان مثال این نظر رو ببینین که یکی از کاربران گذاشته:
  17. برای من مشکلی وجود نداره و من تا به حال خودم به چنین مشکلی برنخوردم. اما بعضی از کاربران توی نظرات برنامه میگن سکه خریدیم واریز نشد. از لحاظ برنامه نویسی هم مشکلی نداره بعد خرید اگه اون تابع onIabPurchaseFinished صدا زده بشه باید سکه براشون واریز بشه ولی فکر کنم این تابع صدا زده نمیشه... Private Sub myket_onIabPurchaseFinished(result As IabResult,purchase As Purchase) Try If purchase.IsInitialized Then If result.isSuccessful=True Then CallSubDelayed2(Me,"consumeAsync",purchase) Else MyToast.ToastMessage("پرداخت ناموفق بود",False) End If End If Catch MyToast.ToastMessage("خطایی رخ داد",False) End Try End Sub Sub consumeAsync(purchase As Purchase) Try adp.creat_map.Clear adp.creat_map.Put("ac",5) adp.creat_map.Put("acc",2) adp.creat_map.Put("orderId",purchase.orderId) adp.creat_map.Put("productId",purchase.Sku) adp.creat_map.Put("purchaseTime",purchase.purchaseTime) adp.host(Me,panelmain,panelmain,True,"hd1","puy_eshterak","update1/sign",adp.creat_map) myket.consumeAsync(purchase) Catch MyToast.ToastMessage("پرداخت ناموفق بود",False) End Try End Sub
  18. سلام کتابخونه روی بیشتر گوشی ها کار میکنه اما بعضی از کاربران گزارش دادن که بعد از پرداخت محصولی (سکه) دریافت نمیکنن...
  19. این کد رو به مانیفست اضافه کردین؟ CreateResourceFromFile(Macro, MyketBilling.Manifest)
  20. سلام دوست عزیز مشکل توی کتابخونه نیست. وقتی خرید انجام میشه تابع EventName_purchaseSucceed صدا زده میشه. شما باید بعد پرداخت موفقیت آمیز بیای و شناسه رو چک کنی ببینی کاربر کدوم محصول رو خریده و فقط همون محصول رو بهش تحویل بدی! If purchaseInfo.productId="MyProduct1" Then Log("باید محصول اول تحویل داده بشه") Else if purchaseInfo.productId="MyProduct2" Then Log("باید محصول دوم تحویل داده بشه") End If
  21. موقع صدا زدن متد purchaseProduct از Try Catch استفاده کنین: Try Dim MyStr As String="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" Dim Payload As String For i=0 To 8 Payload=Payload&MyStr.CharAt(Rnd(0,MyStr.Length-1)) Next Bazaar.purchaseProduct("MyProductID",Payload.Trim) Catch ToastMessageShow("بازار نصب نیست یا خطایی به وجود آمد",False) End Try یه راه دیگه چک کردن نصب بودن بازار روی گوشی قبل از صدا زدن متد purchaseProduct هست: Dim PM As PackageManager If PM.GetInstalledPackages.IndexOf("com.farsitel.bazaar")<>-1 Then Dim MyStr As String="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" Dim Payload As String For i=0 To 8 Payload=Payload&MyStr.CharAt(Rnd(0,MyStr.Length-1)) Next Bazaar.purchaseProduct("MyProductID",Payload.Trim) Else ToastMessageShow("بازار نصب نیست",False) End If در روش دوم باید این دسترسی رو به مانیفست اضافه کنین تا توی اندرویدهای بالاتر به مشکل نخورین: AddPermission(android.permission.QUERY_ALL_PACKAGES) این یه دسترسی حساسی هست که موقع فرستادن اپلیکیشن به بازار برای انتشار باید دلیل استفاده از این دسترسی رو توضیح بدین و بگین صرفا جهت چک کردن نصب بودن بازار استفاده میشه تا از فورس کلوز جلوگیری کنه و از اون هیچ استفاده دیگه ای نمیشه.
  22. ویرایش: احتمالا مشکل از خود مایکت بوده، امروز باز تست کردم درست کار کرد و مشکلی نداشت. اون یکی برنامه هاهم که میگفتم تست کردم دیروز درست کار میکردن احتمالا از نسخه قدیمی کتابخونه مایکت استفاده میکنن. بنابراین دوستان باخیال راحت استفاده کنن.
×
×
  • اضافه کردن...