ورچر - مرجع برنامه نویسی اندروید
67 subscribers
64 photos
1 video
3 files
23 links
کانال مرجع برنامه نویسی اندروید
varchar.ir
آموزش های برنامه نویسی اندروید و کتابخانه های کمکی اندروید

برای پیشنهاد مطالب به یوزر @TheLoneWolf پیام بدید
Download Telegram
این تکنیک رو شاید بلد باشید ولی محض احتیاط برای تازه کارها میزارم

ایجاد سایه زیر تولبار به کمک ویو برای تلفن های با اندروید زیر 5

https://github.com/vipulasri/Toolbar-Elevation-Pre-Lollipop

#tip #shadow #pre_lolipop
@varchar
- برگشتن به اپ از یک آدرس وب خاص در مرورگر
- اضافه کردن درگاه پرداخت زرین پال به اپ
- کاربرد butterknife
- استفاده از رتروفیت
- ریز و بم کار با Gson
- ساخت فروشگاه خیلی ساده
- درست کردن ساختار mvp موقع کد نویسی
- استفاده از کاتلین
- ارسال و نمایش پوش نوتیفیکیشن کاستوم با firebase از سمت کدهای تحت وب خودمون
- استفاده از shapeshifter برای ساخت وکتورهای انیمیشنی برای دکمه ها و جاهای مختلف
و...

این مطالب هم بزودی ارسال میشه منتظر باشید دوباره برگشتم 😉😎

@varchar
آموزش کوتاه - بازگشت مستقیم به اپ از یک آدرس وب

http://varchar.ir/post/return-directly-to-app-from-web.html

#deeplink #redirect #tutorial
@varchar
روش استفاده از وکتورها به عنوان drawable right و ... که در حالت عادی کار نمیکنه

دوتا دستور تو گریدل هست برای وکتور ها
implementation 'com.android.support:support-vector-drawable:27.0.2'

یکی هم بخش دیفالت کانفیگ هست
vectorDrawables.useSupportLibrary = true

بعد دستور super.onCreate( این سطر رو باید بزاری
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

بعد وکتورهایی که میخوای استفاده کنی عادی مثل همیشه اضافه میکنی اسمشم میزاری مثلا ic_email.xml

بعد میای توی فولدر دراوبل یه فایل xml دیگه ایجاد میکنی به اسم مثلا icon_email.xml و به شکل زیر محتواشو مینویسی
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/ic_email" />

</selector>

آخر سر هم میبری ست میکنی به drawable right و یا بقیه دراوبل فیلد های ویو های مختلف
اسم icon_email رو

#drawable_right #fix #tutorial
@varchar
خیلی وقته مطلب تو بلاگ نمی نویسم فرصت نمیشه راستش شرمنده بابت این مورد 😁

امروز داشتم یه اپ موزیک مینوشتم که چندتا مورد پیدا کردم

اولی اینه که روند نشون دادن نوتیفیکیشن تو foreground service ها برای اندروید o عوض شده
لینک نمونه کدهاش اینجا هست
https://stackoverflow.com/questions/44658923/android-foreground-service-notification-not-showing/50634187#50634187

دومی هم برای کنترل موزیک پلیر با دکمه های هدفون - نوتیفیکیشن بار و ... کلا یه اینترفیس مانندی هست تو اندروید به اسم media session که دستورهای کنترل وضعیت پخش موزیک با اون رد و بدل میشه - یه سری پست هم از گوگل دولوپرز در مورش پیدا کردم
https://medium.com/google-developers/understanding-mediasession-part-1-3-e4d2725f18e4

#music #music_player #foreground_services
@varchar
امروز متوجه یه چیزی شدم هر تغییری تو کدهای نوتیفیکیشن ایجاد میکردم صدا و ویبره میزد اپ بعد سرچ دیدم باگ sdk 27 هست

https://issuetracker.google.com/issues/65108694

ظاهرا یه سری باگهای اساسی داره sdk 27 فعلا تو پروژه هاتون نسخه 26 یا 25 استفاده کنید

من که برگشتم رو 25 فعلا بیشتر از همه استیبل تر هست :))
#sdk #bug
@varchar
داخل نستد اسکرول ویو وقتی ریسایکلر ویو دارید و دیتا لود کنید میبینید که ویو خودش اتوماتیک به اونجا اسکرول میخوره که اذیت کننده هست برای غیر فعال کردنش باید به ویو بیرونی دستور
android:focusableInTouchMode="true"
رو اضافه کنید.

https://stackoverflow.com/a/37312042

#اندروید #اسکرول_ناخواسته #nested_scrollview
@varchar
حتما مشکل سوایپ ویوپیجری که بهش دایرکشن rtl دادید رو شما هم تجربه کردید :))

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

بعد یکم سرچ دیدم ویژگی به این شکل تو xml هست برای اندروید
android:rotationY="180"

اومدم این رو ست کردم به ویو پیجر یعنی این شکلی

<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rotationY="180" />

با انجام این کار ویو برعکس کار میکنه مشکلی هم که داره محتویات داخلیش هم 180 درجه چرخیدن

بعدش اومدم به خارجی ترین لایه فرگمنت هام اینو اضافه کردم درست شد
android:rotationY="-180"

یعنی مثلا خارجی ترین لایه به این شکل هست

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:rotationY="-180"
tools:context=".fragment.FoodListFragment">

</LinearLayout>

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

#rtl #reverse_swipe #view_pager
@varchar
حل مشکل کش شدن open graph protocol سایت ها در تلگرام

یه یاداشت کوچیک برای کسایی که وب هم کار میکنن وقتی برای سایتتون تو هدر توضیحات شبکه های اجتماعی و عکس هاشو اضافه میکنید ممکنه اشتباهی پیش بیاد و لینک رو کپی کنید تو تلگرام بفرستید برا مشتری

یه مسئله ای پیش میاد اون هم اینه که تلگرام این توضیحات رو کش میکنه و حتی در صورت ویرایش هم درست نمیشه برای درست شدنش یه رباتی هست @webpagebot به این ربات لینک سایت مورد نظر رو بفرستید گزینه های آپدیت رو بزنید خودش درست میکنه :))

#web #telegram #open_graph #cache
@varchar
امروز یکی از سورسهای قدیمیم رو میخواستم با اس دی کا 28 کامپایل کنم یه ارور دیدم که مربوط به یک تغییری جالب تو اندروید P یا M هست.

Starting with Android 9 (API level 28), cleartext support is disabled by default.

یعنی از این به بعد اگه اپلیکیشن میخوایید بزارید رو گوگل پلی باید 100% گواهی ssl داشته باشید.

برای مارکت های دیگه چون تارگت اس دی کی مهم نیست میتونید دور بزنید.

روش دور زدن هم اضافی کردن android:usesCleartextTraffic="true" به تگ application تو منیفست هست

https://developer.android.com/training/articles/security-config#CleartextTrafficPermitted

اینجا هم یه رفیقمون یه مقاله ای درموردش نوشته که بعدا میخونم ببینم چی میگه
https://koz.io/android-m-and-the-war-on-cleartext-traffic/

#android #android_p #networking

@varchar
خواندن اس ام اس احراز هویت برای ورود به اپ بدون پرمیشن

امروز گوگل اپلیکیشن یکی از مشتریان رو حذف کرده بود چک کردم ببینم دلیلش چیه که دیدم به دسترسی اس ام اس خوندن که تو ورژن آخر اضافی کرده بودم گیر دادن و نوشتن که در صورتی که نیاز هست باید با جزئیات اعلام کنید جریان چیه تا بصورت استثنا تایید کنیم. متنش جالبه پست بعدی میزارم خودتون چک کنید

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

بعد چک کردن بالاخره دیدم برای اس ام اس هم خود گوگل یه راه حل ارائه داده که خیلی ساده هست SMSRetriver هست اسمش

راهنماش اینجا هست ولی کد ساده اش رو فردا میزارم تا همینجا کانال هم باشه
https://developers.google.com/identity/sms-retriever/request

تنها نکته اش که من رو باعث شد اتلاف وقت داشته باشم اس ام اس ارسالی باید یه سری ویژگی داشته باشه

- Be no longer than 140 bytes
- Begin with the prefix <#>
- Contain a one-time code that the client sends back to your server to complete the verification flow (see Generating a one-time code)
- End with an 11-character hash string that identifies your app (see Computing your app's hash string)

این سطر آخر نوشته که باید هش استرینگ داشته باشه که برای ساختش یا باید لینوکسی باشید و با کلید و کد هش استرینگ رو بگیرید
https://developers.google.com/identity/sms-retriever/verify

یا هم این کلاس رو کپی کنید تو برنامه اتون و آبجکت بسازید و متد getAppSignatures() رو فراخوانی کنید از لاگ کت مقدار Hash رو بردارید
https://github.com/googlesamples/android-credentials/blob/master/sms-verification/android/app/src/main/java/com/google/samples/smartlock/sms_verify/AppSignatureHelper.java


#android #sms

@varchar
متن ایمیل گیردادن به دسترسی Call - SMS

Please read through the Permissions policy and the Play Console Help Center article (which describes intended uses, exceptions, invalid uses, and alternative options for use of Call Log or SMS permissions) to determine which of the following options applies to your app:

Option 1) If your app does not require access to Call Log or SMS permissions:

Remove the specified permissions from your app’s manifest, or migrate to an alternative implementation, then publish the updated version of your app using the standard release process.

Option 2) If your app’s use case is not eligible but you require additional time to make the necessary changes to your app:

You may request an extension by releasing a new version of your APK with a higher version code. You'll be required to complete a Permissions Declaration as a step in the release process. Select the option "No, this release does not meet the SMS and Call Log permissions policy," and fill out the remainder of the form's required fields. You will have until March 9, 2019 to make the necessary changes to your app.

Option 3) If your app is a default handler, or you believe your app qualifies for an exception:

Release a new version of your APK with a higher version code. You'll be required to complete a Permissions Declaration as a step in the release process. Select the appropriate use case for your app and fill out the remainder of the form's required fields.


https://support.google.com/googleplay/android-developer/answer/9047303

@varchar
سلام

داشتم در مورد کراپ کردن عکس قبل از آپلود کردن عکس به سرور سرچ میکردم که یه اینتنت پیدا کردم به این شکل

Intent cropIntent = new Intent("com.android.camera.action.CROP");

ولی بعدش مشکوک شدم سرچ زدم ببینم جدی ماله اندروید هست یا نه که دیدم نه ماله خود سیستم عامل نیست برای کراپ کردن از کتابخونه باید استفاده کرد همینجا توضیحاتش هست بخونید :))

https://commonsware.com/blog/2013/01/23/no-android-does-not-have-crop-intent.html

#crop_image #android #image

@varchar
Forwarded from utubebot
Media is too big
VIEW IN TELEGRAM
SMS Verification Codes Made Easy on Android V2!
utubebot
SMS Verification Codes Made Easy on Android V2!
یک روش خواندن اس ام اس فعال سازی دیگه که گوگل معرفی کرده یکم متفاوت تر از sms retriever هست و روش بهتری هم هست - چون اونجا اول و آخر اس ام اس فرمتش زشت تر میشد این شکلی خیلی بهتره

نمونه کدش هم اینجا هست

https://developers.google.com/identity/sms-retriever/user-consent/request

باید سر فرصت تست کنم ببینم گوگل پلی تایید میکنه یا نه خبرشو میدم اینجا :)

#sms #android

@varchar
روش درست ساخت اپ از روی pwa

این روزها که مسایل تحریم و حذف اپ ها زیاد شده شرکت های زیادی به سمت pwa اومدن که وب سایتهاشون رو جوری برنامه نویسی کنن که بصورت اپلیکیشن بشه رو گوشیها نصب و اجرا کرد.
اینجور مواقع هم استارتاپ ها و شرکت ها میخوان وب اپ خودشون رو به شکل اپلیکیشن دربیارن و تو مارکت ها منتشر کنن.
خب بیشتر مواقع ما یا سمت وب ویو میریم یا کروم تب که یه سری محدودیت هایی دارن مثلا مثل اپ های نیتیو فول اسکرین نمیشن و یا نیازمند تنظیمات زیادی هستن و بیشتر مواقع هم پلی استور رد میکنه چون پرفومنس لازم رو ندارن :)

برای همین گوگل خودش اومده یه حالت استاندارد و با محدودیت کمتر گذاشته که بهش میگن twa یا همون Trusted Web Activities که فرق زیادی با کروم تب ویو نداره پست بعدی عکسش رو میزارم تفاوت هاشون

یه سری مزایا و شرایط استفاده داره که تو این فیلم یوتیوب توضیح میدن
https://www.youtube.com/watch?v=6lHBw3F4cWs

برای پیاده سازی که خیلی چیز خاصی هم نیست میتونید راهنمای خود گوگل رو ببینید
https://developers.google.com/web/updates/2019/02/using-twa

در کل چیزخاصی فرق نکرده ولی گوگل همیشه اجازه یه سری کارها رو میده بعدا میاد قوانین میزاره که امن تر بشه کاربرهاش :)

#android #web #pwa #twa

@varchar
این هم تفاوت های twa - webview - chrome custom tabs

@varchar
پرداخت درون برنامه ای کافه بازار یا هر مارکت در اندروید ۱۱

- در صورتی که ورژن compileSdk برنامه‌ی شما اندروید ۱۱ (ای‌پی‌آی ورژن ۳۰) ‌باشد، نیاز هست که تگ queryرا به فایل AndroidManifest.xml خود اضافه کنید تا اس‌دی‌کی بتواند وضعیت نصب بودن برنامه بازار را بررسی کند.

https://developer.android.com/training/package-visibility/declaring

یعنی مثلا برا کافه بازار یه همچین حالتی نیازه

<manifest package="com.example.game">

<queries>
<package android:name="com.farsitel.bazaar" />
</queries>
...
</manifest>

@varchar
سلام
یه پست دیگه بعد مدت ها :))

این روزها توی یک اپلیکیشن نیاز داشتم مختصات مرز شهرها رو برای محدود کردن بازه انتخابی از یک نقشه رو پیدا کنم ولی خب مشکل بود یک پستی از استک اکسچنج پیدا کردم که کپی میکنم اگر دوستان نیاز داشتن استفاده کنند

https://gis.stackexchange.com/a/192298


1- از طریق اوپن استریت مپ میاییم اسم شهر رو سرچ میکنیم از لیست اومده گزینه مورد نظر رو انتخاب کنید تو آدرسی که باز میشه یه osm id هست اونو باید کپی بگیریم
http://nominatim.openstreetmap.org/

2- تو این لینک زیر هم میاییم اون osm id رو سرچ میکنیم و به شکل فرمت دلخواه دیتای مورد نظر رو دانلود میکنیم
http://polygons.openstreetmap.fr/index.py

#map #json #geolocation

@varchar