آموزش برنامه نویسی اندروید با اندروید استودیو (بخش پنجاه و چهارم: انتقال اپلیکیشن به حافظه SD )

استاندارد

بیشتر دستگاه های اندرویدی با حافظه داخلی 16 یا 32 گیگابایت عرضه می شوند. که پس از آن که سیستم عامل و اپلیکیشن هامقداری از آن را به خود اختصاص دهند، مقدار باقی مانده کمتر خواهد بود.

اگر چه این مقدار نیز می تواند در ابتدا کافی باشد ولی به مرور زمان ممکن است حافظه داخلی بعد از مدتی دچار کمبود حافظه شود.

امروزه بیشتر گوشی ها و تبلت های اندرویدی ، امکان اضافه کردن Sd Card را دارند. که می توان با استفاده از آن بعضی از اپلیکیشن ها را به کارت حافظه انتقال داد.

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

به عبارتی اگر پروژه هایی که تا به حال نوشته اید، قابلیت Move to Sd card آن ها، غیرفعال بوده است، به دلیل آن است که این امکان را برای پروژه ی خود به وجود نیاورده بودید.

می توان با دسترسی دادن به این پروژه، طبق چیزی که در زیر گفته شده است، این کار را انجام داد.

ولی ما این آموزش را به صورت پروژه محور انجام داده و با استفاده از Intent ، می خواهیم به سراغ تنظیمات این اپلیکیشن رفته تا این بخش را به صورت مستقیم مشاهده کنیم.

همچنین برای کسانی که می خواهند از درون یک اپلیکیشن به صورت مستقیم، به قسمت تنظیمات آن بروند، آموزش خوبی است.

تعیین دسترسی ها

برای آن که بتوانیم به Sd Card منتقل نماییم و در واقع انتقال این اپلیکیشن به حافظه Sd ، باید دسترسی های آن را پیکربندی نماییم.

به سراغ manifests->AndoirdManifest.xml می رویم. سپس کد زیر را در تگ manifest> اضافه می کنیم.

android:installLocation="auto"

دقت نمایید که همین کار برای فعال شدن Move to Sd Card کافی ست.

طراحی Layout اپلیکیشن

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

من یک پروژه در اندروید استودیو ایجاد می کنم و نامش را Sd-Card-Gsm می گذارم.

به سراغ Layout اپلیکیشن (activity_main.xml) می رویم و یک دکمه Button ایجاد می کنیم.

<Button
        android:text="Move to Sd Card"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/button"
        android:onClick="AppManager"/>

دقت نمایید که به دکمه Button بالا یک خاصیت onClick اضافه نمودیم که مقدار آن AppManager می گذاریم تا متد آن را بعدا در قسمت جاوای برنامه بنویسیم.

android:onClick="AppManager"/>

کاری که این دکمه Button انجام می دهد اینست که با کلیک بر روی آن، برنامه به اکتیویتی تنظیمات این اپلیکیشن رفته تا عملیات Move to Sd Card را برای آن انجام دهیم.

MainActivity.java

به سراغ برنامه نویسی این پروژه (MainActivity.java) می رویم تا کدهای جاوای آن را بنویسیم.

در این قسمت ، در کلاسMainActivity ، یک متد به نام AppManager ایجاد می کنیم.

کاری که این متد برای ما انجام می دهد اینست که با استفاده از این Intent ، وقتی به روی دکمه Button کلیک نماییم، به قسمت تنظیمات (Settings) این اپلیکیشن می رویم.

این متد به شکل زیر است:

public void AppManager(View view) {
        String packageName = "com.gsm_developers.sd_card_gsm";

        try {
            Intent intent = new  Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.setData(Uri.parse("package:" + packageName));
            startActivity(intent);
        }
        catch (ActivityNotFoundException e) {
            Intent intent = new  Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
            startActivity(intent);
        }
    }

 

کدهای بالا را شرح می دهیم:

در قسمت try این متد، یک Intent به نام intent می سازیم که به application details این برنامه دسترسی داشته و وارد آن شویم.

Intent intent = new  Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

ولی در ابتدای این متد، یک متغیر به نام packageName از نوع رشته می سازیم که مقدار آن را برابر نام پکیج این پروژه قرار می دهیم.

String packageName = "com.gsm_developers.sd_card_gsm";

باید نام پکیج این اپلیکیشن وقتی به Sd Card منتقل شود، را به این Intent تخصیص دهیم.

intent.setData(Uri.parse("package:" + packageName));

در قسمت بعدی باید این Intent را با استفاده از کد startActivity شروع (Start) نماییم.

startActivity(intent);

کد کامل MainActivity

package com.gsm_developers.sd_card_gsm;

import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void AppManager(View view) {
        String packageName = "com.gsm_developers.sd_card_gsm";

        try {
            Intent intent = new  Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.setData(Uri.parse("package:" + packageName));
            startActivity(intent);
        }
        catch (ActivityNotFoundException e) {
            Intent intent = new  Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
            startActivity(intent);
        }
    }
}

یادتان باشد که دسترسی این اپلیکیشن را نیز تغییر دهید.

یعنی به سراغ manifests->AndoirdManifest.xml رفته و سپس کد زیر را در تگ manifest> اضافه می کنیم.

android:installLocation="auto"

 کد کامل manifest این اپلیکیشن را در زیر مشاهده می کنید.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gsm_developers.sd_card_gsm"
    android:installLocation="auto">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

کار به اتمام رسیده است، پروژه را Run می کنیم.

با زدن دکمه ی Move To Sd Card به بخش Settings این اپلیکیشن می رویم.

مشاهده می کنید که این قسمت برای این اپلیکیشن فعال شده است.

آموزش اضافه کردن آیتم به Settings.apk/تعویض طرح

استاندارد

با سلام امروز با آموزشی دیگر در خدمتتان هستیم،با ما همراه باشید

در این آموزش انواع ویرایش های مورد نیاز برای فایل Settings.apk را قرار می دهم ولی یک توسعه دهنده نباید فقط به این کدها بسنده کند با دیدن انواع فایلهای ستینگ در کاستوم رامهای دیگر می توان از نبوغ خود استفاده و تغییرات زیادی را بدهید.

برنامه های مورد نیاز

یک برنامه ویرایش متن: برای ویندوز توصیه بنده Notepad++ و برای لینوکس Geany

برای سهولت کار این برنامه را نیز بر روی گوشی نصب کنید Zipsigner

برای شروع کار اول فایل Settings.apk را دیکامپایل کنید.(طبق آموزش سایت فایل را دیکامپایل کنید)

ویرایش فایل Strings

به پوشه دیکامپایل Settings بروید و در مسیر res/xml/settings_headers.xml فایل مورد نظر را با ویرایشگر متن باز کنید.

در فایل مورد نظر شما هر گزینه که نیاز دارید را ویرایش کنید ما بعنوان نمونه گزینه “Developer settings” را به “Noobs keep out” تغییر می دهیم در خط زیر

<header android:icon= @drawable/ic_settings_development" android:id="@id/development_settings" android:title="@string/development_settings_title" android:fragment="com.android.settings.DevelopmentSettings" />

برای این کار و تغییر عنوان فایل Strings.xml زبان مورد نظر خودتان را باز کنید و با استفاده از جستجو (Ctrl+F) گزینه خود را پیدا کنید.

ما گزینه “development_settings_title” را جستجو کردیم.

<string name="development_settings_title">Developer options</string>

برای تغییر عنوان بالا آن را مانند زیر ویرایش کنید.

<string name="development_settings_title">Noobs keep out</string>

فایل را ذخیره و تمام یک عنوان را تغییر داده اید.

ویرایش آیکونهای Settings

به این مسیر بروید res/xml/settings_headers.xml و فایل را با ویرایشگر متن باز کنید.

دنبال هدر مورد نظر خود که قصد تغییر آن را دارید بگردید.

ما در اینجا برای ویرایش “Development Settings” می رویم که به شکل “ic_settings_advanced” در بیایید.(این نوع فقط در رامهای با بیس سیانوژن می باشد)

<header android:icon= @drawable/ic_settings_development"  android:id="@id/development_settings"  android:title="@string/development_settings_title"  android:fragment="com.android.settings.DevelopmentSettings" />

برای تغییر آیکون آنها را در مسیر res/drawable-hdpi, mdpi, ldpi and xhdpi  میتوانید پیدا کنید.(طبق رام شما متفاوت می باشد نامشان)

برای تغییر ic_settings_advanced کد ما به شکل زیر در می آید.

<header android:icon= @drawable/ic_settings_advanced" android:id="@id/development_settings" android:title="@string/development_settings_title" android:fragment="com.android.settings.DevelopmentSettings" />

برای تغییر آیکون می توانید از مجموعه آیکون خود گوگل نیز کمک بگیرید.

آیکون مورد نظر خود را انتخاب کنید و مطمئن شوید که با رزولوشن صفحه شما یکی باشد.(رزولوشن را می توان در ic_settings icons پیدا کنید)

آن را در پوشه درست کپی کنید.(hdpi, mdpi, xhdpi, ldpi)

نام آن را مانند این نمونه بگذارید.(ic_settings_<name>)

بعد در کد مانند اسمی که انتخاب کردید @drawable/ic_settings_<name> آن را تغییر بدهید.

اضافه کردن گزینه به هدرsettings

برای این کار فایل settings_headers.xml را باز کنید.

جایی که نیاز دارید یک گزینه جدید اضافه کنید کد زیر را کپی کنید.

<header android:icon= @drawable/ic_settings_name" android:id="@id/id" android:title="@string/title">
        <intent android:targetPackage="pkgName" android:action="android.intent.action.MAIN" android:targetClass="pkgName.Activity" />
    </header>

خوب برای تغییر آیکون android:icon را آنگونه که می خواهید تغییر بدهید.

برای عنوان آن را در values/strings.xml وارد کنید و به android:title ارجاع دهید.

گزینه android:targetPackage را هم به نام برنامه ای که می خواهید اجرا شود تغییر دهید.

گزینه android:targetClass را نیز به نام برنامه تغییر دهید.

گزینه android:id را طبق ایدی که در values/ids.xml  می دهید تغییر دهید.(اگر هم میل دارید میشود این گزینه را پاک کرد)

تمام

مرتب سازی Settings

برای مرتب سازی گزینه ها فایل settings_headers.xml را باز کنید.(یا منو فرعی مورد نظر خودتان)

برای تغییر و مرتب سازی هر گزینه ای که می خواهید را کات کنید و در مکان مورد نظرتان بگذارید.

همین تمام

اضافه کردن گزینه به منوهای فرعی

ما به عنوان نمونه می خواهیم گزینه “Credits” را به “About device” اضافه کنیم.

فایل منو فرعی مورد نظر را باز کنید.(برای ما device_info_settings.xml می باشد)

مکان مورد نظر برای گزینه را پیدا کنید و خط زیر را اضافه کنید.

<Preference android:title="@string/title" android:key="key" android:summary="@string/summary" style="?android:preferenceInformationStyle" />

گزینه android:title را به عنوانی که در values/strings.xml قرار داده اید تغییر بدهید.

گزینه android:key را آن جور که می خواهید تغییر دهید.

گزینه android:summary را به متن طولانی مورد نظر خود تغییر دهید.(در values/strings.xml)

تمام

قرار دادن جدا کننده در بین تنظیمات

برای قرار دادن جدا کننده در صفحه تنظیمات اصلی

فایل settings_headers.xml را باز کنید

بگردید و جایی که می خواهید یک جداکننده قرار دهید را پیدا کنید و کد زیر را قرار دهید

<header android:id="@id/id" android:title="@string/title" />

گزینه android:id را طبق مقداری که در values/ids.xml داده اید وارد کنید.

گزینه android:title را نیز مانند مقدار خودتان در strings.xml عوض کنید.

اضافه کردن جدا کننده به منوهای فرعی

فایل منوی فرعی مورد نظر خودتان را باز کنید

جای که می خواهید جداکننده بگذارید را پیدا و کد زیر را قرار دهید

<PreferenceScreen android:title="@string/title" android:key="key">

قبل از اضافه کردن جداکننده دیگر نیز کد زیر را بگذارید

</PreferenceScreen>

گزینه android:title  را به مقداری که در strings.xml قرار داد ه اید تغییر دهید

نوشته key را نیز به هر چی دلتان می خواهد تغییر نام دهید.

آموزش نمایان ماندن گزینه Developer settings

فایل settings_headers.xml را باز کنید

دنبال کد زیر بگردید

<header android:icon= @drawable/ic_settings_development" android:id="@id/development_settings" android:title="@string/development_settings_title" android:fragment="com.android.settings.DevelopmentSettings" />

گزینه id from development_settings را به development_settings_force تغییر دهید

<header android:icon= @drawable/ic_settings_development"  android:id="@id/development_settings_force"  android:title="@string/development_settings_title"  android:fragment="com.android.settings.DevelopmentSettings" />

بعد فایل values/ids.xml را باز کنید و کد زیر را قرار دهید

<item type="id" name="development_settings_force">false</item>

تمام

ریکامپایل فایل Settings.apk

عملیات ریکامپایل را با APKTOOL یا هر برنامه دارید انجام دهید

برنامه Zipsigner را در گوشی خود باز کنید فایل Settings.apk را از in/out button انتخاب کنید

گزینه “platform” را انتخاب کنید و بر روی sign بزنید

وقتی تمام شد از فایل Settings.apk اصلی خود یک پشتیبان تهیه کنید و فایل ویرایش شده را انتقال دهید به مسیر /system/app/Settings.apk یا با ADB در ویندوز  یا لینوکس کدهای زیر استفاده کنید

adb remount
adb shell cp /system/app/Settings.apk /system/app/Settings.bak
adb shell cp /sdcard/Settings-signed.apk /system/app/Settings.apk

در آخر گوشی را ریستارت کنید.

عیب یابی

اگر apk شما ریکامپایل نشد به کدهای خود دقت کنید یا از برنامه APK Easy Tool استفاده کنید که آموزش و لینک برنامه را در زیر برایتان قرار داده ایم.

اگر فایل settings شما بعد از پایان کار نمایان نشد احتمالا مشکل از ساین کردن باشد دوباره اقدام به ساین کنید،اگر بازم نمایان نشد فقط می توان گفت به بد شانسی خورده اید از اول مراحل را با دقت انجام دهید.

هر گونه کپی برداری از متن بدون ذکر منبع شرعا حرام و مورد پسند نویسنده نمی باشد

آموزش اضافه کردن نوشته در منوی اطلاعات گوشی

استاندارد

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

امروز نیز ما در این آموزش چگونگی اضافه کردن این اطلاعات را توضیح می دهیم با ما همراه باشید.

برنامه های مورد نیاز

برنامه NOTEPAD++

برنامه 7-ZIP

فایل Settings.apk  مورد نظر گوشی

برنامه apktool که در لینک زیر آموزش بهمراه لینک دانلود قرار دارد

شروع کار

فایل SETTINGS.APK را دیکامپایل کنید.

به مسیر /res/values/strings.xml بروید و فایل را با NOTEPAD++ باز کنید.

در آخر کد زیر را اضافه کنید.

<string name ="header_rom_name">ROM NAME</string>
<string name ="header_rom_version">ROM VERSION</string>
<string name ="header_rom_release_date">ROM RELEASE DATE</string>
<string name ="header_rom_maker">ROM MAKER</string>

کدهای بالایی نام بالایی گزینه ها را تعیین می کنند هر نامی مد نظرتان بود بنویسید.

در زیر کدهای بالا کد زیر را اضافه کنید برای نام زیرین

<string name ="rom_name">YOUR ROM NAME</string>
<string name ="rom_version">YOUR ROM VERSION</string>
<string name ="rom_release_date">YOUR ROM RELEASE DATE</string>
<string name ="rom_maker">YOUR NAME</string>

خوب اکنون فایل ما تا حدودی شبیه به زیر می باشد.

<string name ="header_rom_name">ROM NAME</string>
<string name ="header_rom_version">ROM VERSION</string>
<string name ="header_rom_release_date">ROM RELEASE DATE</string>
<string name ="header_rom_maker">ROM MAKER</string>
<string name ="rom_name">YOUR ROM NAME</string>
<string name ="rom_version">YOUR ROM VERSION</string>
<string name ="rom_release_date">YOUR ROM RELEASE DATE</string>
<string name ="rom_maker">YOUR NAME</string>

فایل را ذخیره کنید و ببندید.

اکنون فایل res/xml/device_info_settings.xml را باز کنید.

کد زیر را به پایان اضافه کنید.

< Preference android:title="@string/header_rom_name" android:key="rom_name" android:summary="@strings/rom_name" style="?android:preferenceinformationStyle />
< Preference android:title="@string/header_rom_version" android:key="rom_version" android:summary="@strings/rom_version" style="?android:preferenceinformationStyle />
< Preference android:title="@string/header_rom_release_date" android:key="rom_release_date" android:summary="@strings/rom_release_date" style="?android:preferenceinformationStyle />
< Preference android:title="@string/header_rom_maker" android:key="rom_maker" android:summary="@strings/rom_maker" style="?android:preferenceinformationStyle />

این کدها باعث می شوند که نامهای اولی که نوشتید در تنظیمات نمایان شوند.

فایل را ذخیره و ببندید.

در آخر Settings.apk را ریکامپایل کنید تمام

هر گونه کپی برداری از متن بدون ذکر منبع شرعا حرام و مورد پسند نویسنده نمی باشد.