<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ZIRES - saeed karimi</title>
        <link>https://virgool.io/feed/@classiczires</link>
        <description>Android programmer ••••••••••••••••• http://zires.ir</description>
        <language>fa</language>
        <pubDate>2026-06-07 11:48:00</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/103548/avatar/CmAp6z.png?height=120&amp;width=120</url>
            <title>ZIRES - saeed karimi</title>
            <link>https://virgool.io/@classiczires</link>
        </image>

                    <item>
                <title>مجوزها در اندروید - Android Permissions</title>
                <link>https://virgool.io/MobileLab/%D9%85%D8%AC%D9%88%D8%B2%D9%87%D8%A7-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-android-permissions-spywwbyq7e8y</link>
                <description>نمای کلی مجوزها - Permissions overviewهدف از این کار ، محافظت از حریم شخصی کاربر اندروید است. برنامه های اندروید برای دسترسی به داده های حساس کاربر (مانند مخاطبین و پیام ها) و همچنین برخی از ویژگی های سیستم (مانند دوربین و اینترنت) باید درخواست مجوز کنند. بسته به ویژگی ، سیستم ممکن است مجوز را به طور خودکار اعطا کند یا ممکن است کاربر را وادار کند تا درخواست را تأیید کند.نکته اصلی طراحی معماری سیستم عامل Android این است که هیچ برنامه ای ، به طور پیش فرض ، اجازه انجام عملی را ندارد که روی برنامه های دیگر ، سیستم عامل یا کاربر تأثیر منفی بگذارد. این شامل خواندن یا نوشتن داده های شخصی کاربر (مانند مخاطبین یا ایمیل) ، خواندن یا نوشتن فایل های برنامه دیگر ، انجام دسترسی به شبکه ، بیدار نگه داشتن دستگاه و غیره است.تأیید مجوزبرای اینکه یک برنامه بتواند مجوز های مورد نیازش را تایید کند، باید این مجوزها را با درج برچسب های &lt;uses-permission&gt; در مانیفست برنامه مشخص کند. با این کار برنامه به اطلاع استفاده کنندگان میرساند که نیاز به تایید چه مجوزهایی دارد. به عنوان مثال ، برنامه ای که نیاز به ارسال پیام کوتاه دارد ، این خط را در مانیفست دارد:&lt;manifest xmlns:android=&amp;quothttp://schemas.android.com/apk/res/android&amp;quot
     package=&amp;quotcom.example.snazzyapp&amp;quot&gt;
  &lt;uses-permission android:name=&amp;quotandroid.permission.SEND_SMS&amp;quot/&gt;
  &lt;application ...&gt;
    ...
  &lt;/application&gt;
&lt;/manifest&gt;اگر برنامه شما مجوزهای عادی (normal permissions) را در مانیفست خود ذکر کند (یعنی مجوزهایی که خطرات زیادی برای حفظ حریم خصوصی کاربر یا عملکرد دستگاه ایجاد نمی کند) ، سیستم بطور خودکار آن مجوزها را به برنامه شما اعطا می کند.اگر برنامه شما مجوزهای خطرناک (dangerous permissions) را در مانیفست خود ذکر کرده است (یعنی مجوزهایی که به طور بالقوه می تواند بر حریم شخصی کاربر یا عملکرد عادی دستگاه تأثیر بگذارد) مانند مجوز SEND_SMS در بالا ، کاربر باید صریحاً موافقت خود را با اعطای مجوزها انجام دهد.درخواست مجوزهای خطرناکفقط مجوزهای خطرناک نیاز به توافق کاربر دارند. روشی که اندروید از کاربر می خواهد مجوزهای خطرناک را صادر کند به نسخه Android که در دستگاه کاربر اجرا می شود و نسخه سیستم مورد نظر برنامه شما (targetSdkVersion) بستگی دارد.درخواست های زمان اجرا (Android 6.0 و بالاتر)اگر دستگاه Android 6.0 (سطح API 23 یا بالاتر) را اجرا کند، و targetSdk برنامه ورژن 23 (targetSdkVersion) یا بالاتر باشد، هیچکدام از مجوز های مورد نیاز برنامه در هنگام نصب از کاربر درخواست نمی شود. برنامه شما باید از کاربر بخواهد مجوزهای خطرناک را در زمان اجرا اعطا کند.درخواست مجوزها در زمان اجرادرخواست زمان نصب (Android 5.1.1 و پایین تر)اگر دستگاه Android 5.1.1 را اجرا کند (سطح API 22) یا پایین تر، یا targetSdk برنامه ورژن 22 و یا پایین تر باشد، برنامه بر روی هر نسخه از Android که اجرا شود، سیستم به طور خودکار از کاربر می خواهد تا مجوزهای خطرناک را برای برنامه شما در هنگام نصب صادر کند.مجوزهای ویژگیهای سخت افزاریدسترسی به برخی از ویژگی های سخت افزاری (مانند بلوتوث یا دوربین) نیاز به مجوز برنامه دارد. با این حال، همه دستگاه های اندرویدی در واقع از این ویژگی های سخت افزاری برخوردار نیستند. بنابراین اگر برنامه شما CAMERA را درخواست کرده است، شما باید برچسب &lt;uses-feature&gt; را در مانیفست خود بگنجانید تا اعلام کند که آیا این ویژگی در واقع مورد نیاز است یا خیر.مثلا:&lt;uses-feature android:name=&amp;quotandroid.hardware.camera&amp;quot android:required=&amp;quotfalse&amp;quot /&gt;اگر شما به صورت android:required=&quot;false&quot; استفاده کردید، Google Play به برنامه شما اجازه می دهد تا روی دستگاه هایی که این ویژگی را ندارند نصب شود.سطح حفاظت در اندروید - Android Protection levelsمجوزها به چندین سطح حفاظت تقسیم می شوند. سطح حفاظت برروی درخواست های مورد نیاز زمان اجرا تأثیر می گذارد.سه سطح محافظت وجود دارد که برنامه های شخص ثالث را تحت تأثیر قرار می دهد: normal, signature و dangerous.مجوزهای عادی - Normal permissionsمجوزهای عادی بخش هایی از برنامه شما که به دسترسی به داده ها یا منابع خارج از برنامه نیاز دارد، پوشش می دهد ، اما جایی که خطرات کمی برای حفظ حریم خصوصی کاربر یا عملکرد سایر برنامه ها وجود دارد. به عنوان مثال ، اجازه تنظیم منطقه زمانی یک مجوز معمولی است.اگر یک برنامه در manifest خود اعلام کند که به یک مجوز عادی احتیاج دارد، سیستم بطور خودکار در هنگام نصب برنامه، مجوز را به آن اعطا می کند. در این سیستم کاربر مجوزهای عادی را اعطا نمی کند و نمی تواند این مجوزها را لغو کند.مجوزهای امضا - Signature permissionsسیستم عامل اندروید این مجوزهای برنامه را در زمان نصب اعطا می کند ، اما فقط وقتی که برنامه ای سعی در استفاده از مجوز دارد، توسط همان برنامه ای که مجوز را تعریف می کند امضا شود.هنگامی که شما مجوزی را در برنامه خود تعریف میکنید و از آن مجوز در برنامه دیگر استفاده میکنید، اگر هر دو نرم افزار با یک گواهی امضا شده باشند، سیستم عامل اندروید هنگام نصب نرم افزار (نرم افزاری که درخواست مجوز کرده است) مجوز را به آن اعطا میکند.مجوزهای خطرناک - Dangerous permissionsمجوزهای خطرناک شامل بخش هایی میشود که نرم افزار داده یا منابعی را میخواهد که اطلاعات شخصی کاربر را در بر می گیرد، یا می تواند بر داده های ذخیره شده کاربر یا عملکرد سایر برنامه ها تأثیر بگذارد. به عنوان مثال ، امکان خواندن مخاطبین کاربر یک مجوز خطرناک است. اگر یک برنامه اعلام کند که به یک مجوز خطرناک احتیاج دارد، کاربر مجبور است صریحاً اجازه این برنامه را صادر کند. تا زمانی که کاربر مجوز را تأیید نکند، برنامه شما نمی تواند عملکردی را که به آن مجوز بستگی دارد ارائه دهد.برای استفاده از یک مجوز خطرناک ، برنامه شما باید از کاربر بخواهد مجوز را در زمان اجرا اعطا کند. https://developer.android.com/guide/topics/permissions/overview </description>
                <category>ZIRES - saeed karimi</category>
                <author>ZIRES - saeed karimi</author>
                <pubDate>Fri, 13 Dec 2019 21:27:31 +0330</pubDate>
            </item>
                    <item>
                <title>اندروید - پشتیبان گیری از داده های کاربر (SharedPreferences) با استفاده از Auto Backup</title>
                <link>https://virgool.io/MobileLab/%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-sharedpreferences-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-auto-backup-y4lzaqlhfnml</link>
                <description>برای پشتیبان گیری از داده ها در اندروید، Auto Backup بطور خودکار از داده های کاربر، مربوط به برنامه هایی که در اندروید 6.0 (API 23 یا بالاتر) اجرا می شوند، پشتیبان گیری می کند. این اطلاعات با محدودیت 25 مگابایت به ازای هر برنامه و در یک پوشه خصوصی در Google Drive نگهداری میشوند. میزان حافظه مصرفی توسط اطلاعات بکاپ برنامه ها جدا از سهمیه 15 گیگابایتی Google Drive میباشد.اطلاعاتی که پشتیبان گیری میشوند شامل فایل هایی است که توسط سیستم به برنامه اختصاص داده شده است:Shared preferences files.Files saved to your app&#x27;s internal storage, accessed by getFilesDir() or getDir(String, int).Files in the directory returned by getDatabasePath(String), which also includes files created with the - SQLiteOpenHelper class.Files on external storage in the directory returned by getExternalFilesDir(String).فعال و غیرفعال کردن backup در پروژه اندرویددر فایل manifest برنامه، با استفاده از android:allowBackup میتوانید پشتیبان گیری از اپ خود را فعال یا غیر فعال کنید:&lt;manifest ... &gt;
  ...
  &lt;application android:allowBackup=&amp;quottrue&amp;quot ... &gt;
    ...
  &lt;/application&gt;
&lt;/manifest&gt;شخصی سازی فایل ها برای پشتیان گیریبرای اطلاعاتی مانند توکن ها و اطلاعات اعتبار سنجی کاربر که در صورت بکاپ گیری از این اطلاعات مشکلاتی در عملکرد برنامه پیش می آید مانند توکن لاگین کاربر که برای خودم پیش آمد. در این حالت کاربر لاگین میکرد، از اطلاعات برنامه (شامل توکن) بکاپ گرفته می شد و بعد از حذف و نصب مجدد برنامه، اطلاعات بکاپ بازگردانی میشدند و کاربر با اپلیکیشن لاگین شده مواجه میشد!برای جلوگیری از این مسائل میتوانید فایل هایی که پشتیبان گیری میشوند را شخصی سازی کنید.در AndroidManifest.xml فیلد android: fullBackupContent را به &lt;application&gt; اضافه کنید. این ویژگی به یک فایل XML اشاره دارد که حاوی قوانین پشتیبان گیری است. مثلا:&lt;application ...
    android:fullBackupContent=&amp;quot@xml/my_backup_rules&amp;quot&gt;
&lt;/application&gt;یک فایل XML با نام my_backup_rules.xml در مسیر / res / xml / ایجاد کنید. در داخل پرونده ، قوانین را با &lt;include&gt; و &lt;exclude&gt; اضافه کنید. نمونه زیر از کلیه shared preferences ها به جز دستگاه، پشتیبان تهیه می کند:&lt;?xml version=&amp;quot1.0&amp;quot encoding=&amp;quotutf-8&amp;quot?&gt;
&lt;full-backup-content&gt;
    &lt;include domain=&amp;quotsharedpref&amp;quot path=&amp;quot.&amp;quot/&gt;
    &lt;exclude domain=&amp;quotsharedpref&amp;quot path=&amp;quotdevice.xml&amp;quot/&gt;
&lt;/full-backup-content&gt;سینتکس XML برای فایل پیکربندی:&lt;full-backup-content&gt;
    &lt;include domain=[&amp;quotfile&amp;quot | &amp;quotdatabase&amp;quot | &amp;quotsharedpref&amp;quot | &amp;quotexternal&amp;quot | &amp;quotroot&amp;quot]
    path=&amp;quotstring&amp;quot
    requiredFlags=[&amp;quotclientSideEncryption&amp;quot | &amp;quotdeviceToDeviceTransfer&amp;quot] /&gt;
    &lt;exclude domain=[&amp;quotfile&amp;quot | &amp;quotdatabase&amp;quot | &amp;quotsharedpref&amp;quot | &amp;quotexternal&amp;quot | &amp;quotroot&amp;quot]
    path=&amp;quotstring&amp;quot /&gt;
&lt;/full-backup-content&gt;منبع:developer.android.com</description>
                <category>ZIRES - saeed karimi</category>
                <author>ZIRES - saeed karimi</author>
                <pubDate>Mon, 09 Dec 2019 20:52:43 +0330</pubDate>
            </item>
            </channel>
</rss>