آموزش برنامه نویسی اندروید

شروع موضوع توسط saalek110 ‏9 ژوئن 2019 در انجمن منطق و الگوریتم برنامه‌نویسی

  1. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    برنامه دانلود و نمایش عکس:
    منبع:
    Android Network Connection



    فایل MainActivity.java:
    کد (Javascript):
    package com.tutorialspoint.myapplication;

    import android.app.ProgressDialog;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;

    import android.net.ConnectivityManager;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.ActionBarActivity;
    import android.view.View;

    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.Toast;

    import java.io.IOException;
    import java.io.InputStream;

    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;

    public class MainActivity extends ActionBarActivity {
       private ProgressDialog progressDialog;
       private Bitmap bitmap = null;
       Button b1;

       @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          b1 = (Button) findViewById(R.id.button);

          b1.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                checkInternetConenction();
                downloadImage("http://www.tutorialspoint.com/green/images/logo.png");
             }
          });
       }

       private void downloadImage(String urlStr) {
          progressDialog = ProgressDialog.show(this, "", "Downloading Image from " + urlStr);
          final String url = urlStr;

          new Thread() {
             public void run() {
                InputStream in = null;

                Message msg = Message.obtain();
                msg.what = 1;

                try {
                   in = openHttpConnection(url);
                   bitmap = BitmapFactory.decodeStream(in);
                   Bundle b = new Bundle();
                   b.putParcelable("bitmap", bitmap);
                   msg.setData(b);
                   in.close();
                }catch (IOException e1) {
                   e1.printStackTrace();
                }
                messageHandler.sendMessage(msg);
             }
          }.start();
       }

       private InputStream openHttpConnection(String urlStr) {
          InputStream in = null;
          int resCode = -1;

          try {
             URL url = new URL(urlStr);
             URLConnection urlConn = url.openConnection();

             if (!(urlConn instanceof HttpURLConnection)) {
                throw new IOException("URL is not an Http URL");
             }
               
             HttpURLConnection httpConn = (HttpURLConnection) urlConn;
             httpConn.setAllowUserInteraction(false);
             httpConn.setInstanceFollowRedirects(true);
             httpConn.setRequestMethod("GET");
             httpConn.connect();
             resCode = httpConn.getResponseCode();

             if (resCode == HttpURLConnection.HTTP_OK) {
                in = httpConn.getInputStream();
             }
          }catch (MalformedURLException e) {
             e.printStackTrace();
          }catch (IOException e) {
             e.printStackTrace();
          }
          return in;
       }

       private Handler messageHandler = new Handler() {
          public void handleMessage(Message msg) {
             super.handleMessage(msg);
             ImageView img = (ImageView) findViewById(R.id.imageView);
             img.setImageBitmap((Bitmap) (msg.getData().getParcelable("bitmap")));
             progressDialog.dismiss();
          }
       };

       private boolean checkInternetConenction() {
          // get Connectivity Manager object to check connection
          ConnectivityManager connec
             =(ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);

          // Check for network connections
          if ( connec.getNetworkInfo(0).getState() ==
             android.net.NetworkInfo.State.CONNECTED ||
             connec.getNetworkInfo(0).getState() ==
             android.net.NetworkInfo.State.CONNECTING ||
             connec.getNetworkInfo(1).getState() ==
             android.net.NetworkInfo.State.CONNECTING ||
             connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {
                Toast.makeText(this, " Connected ", Toast.LENGTH_LONG).show();
                return true;
             }else if (
                connec.getNetworkInfo(0).getState() ==
                android.net.NetworkInfo.State.DISCONNECTED ||
                connec.getNetworkInfo(1).getState() ==
                android.net.NetworkInfo.State.DISCONNECTED  ) {
                   Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show();
                   return false;
                }
             return false;
       }

    }
    محتوای:activity_main.xml
    کد (Javascript):
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
       android:paddingRight="@dimen/activity_horizontal_margin"
       android:paddingTop="@dimen/activity_vertical_margin"
       android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
     
       <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="UI Animator Viewer"
          android:id="@+id/textView"
          android:textSize="25sp"
          android:layout_centerHorizontal="true" />
         
       <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Tutorials point"
          android:id="@+id/textView2"
          android:layout_below="@+id/textView"
          android:layout_alignRight="@+id/textView"
          android:layout_alignEnd="@+id/textView"
          android:textColor="#ff36ff15"
          android:textIsSelectable="false"
          android:textSize="35dp" />
         
       <ImageView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/imageView"
          android:layout_below="@+id/textView2"
          android:layout_centerHorizontal="true" />
         
       <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Button"
          android:id="@+id/button"
          android:layout_below="@+id/imageView"
          android:layout_centerHorizontal="true"
          android:layout_marginTop="76dp" />

    </RelativeLayout>
    محتوای AndroidManifest.xml :
    دو خط پرمیشن اضافه شده. اگر نباشه برنامه کار نمی کند.
    کد (Javascript):
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="com.tutorialspoint.myapplication" >
       <uses-permission android:name="android.permission.INTERNET"></uses-permission>
       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
     
       <application
          android:allowBackup="true"
          android:icon="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" >
         
          <activity
             android:name=".MainActivity"
             android:label="@string/app_name" >
           
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
           
          </activity>
           
       </application>
    </manifest>
     
    نوشته شده توسط saalek110 در ‏28 ژوئن 2019
    the_king از این پست تشکر کرده است.
  2. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    نتیجه اجرا:
    a1.png
    در کد باتون من آدرس عکس آواتار خودم را گذاشتم. شما هر عکسی دوست داشتید قرار دهید.
    شرح کد:
    رویداد باتون داخل onCreate است و بعد یکسری تابع بیرون onCreate و داخل کلاس اصلی.
    کلاس اصلی از کلاس دیگری مشتق شده:
    کد (Javascript):
    public class MainActivity  extends ActionBarActivity
    چندتا متغیر هم داخل کلاس همون بعد خط کلاس تعریف شده اند. اینها راهنمایی برای درج کد بود.
    تعریف ابزارها را در فایل activity_main.xml کپی کنید تا ابزارها اتوماتیک به فرم افزوده شود.برنامه دوتا textView دارد و یک imageView و یک باتون.
    اما نکته مهم کار در شبکه:
    نمیشه در Thread اصلی کار کرد. برنامه کار نمی کند. برای کار در شبکه باید در Thread دیگری کار کرد.
    پس داریم:
    کد (Javascript):
           private void downloadImage(String urlStr) {
              progressDialog = ProgressDialog.show(this, "", "Downloading Image from " + urlStr);
              final String url = urlStr;

              new Thread() {   // -------sakhte thread------
                 public void run() {
                    InputStream in = null;
                    ........
                    .......
    همچنین try & catch جاهایی لازمه.
    کد (Javascript):
                    try {
    ...
    ....
    ..
                    }catch (IOException e1) {
                       e1.printStackTrace();
                    }
    اگر برنامه های دیگر شبکه ای پیدا کردید می توانید از روش ایجاد thread این برنامه استفاده کنید و تمرین کنید.
    نگاه کنید این برنامه از کلاسها و تابع های اندروید چطور استفاده کرده.
     
    آخرین ویرایش: ‏28 ژوئن 2019
    نوشته شده توسط saalek110 در ‏28 ژوئن 2019
    the_king از این پست تشکر کرده است.
  3. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    Android MySQL Database Tutorial – Android Login with PHP MySQL

    این سایت هم برای ارتباط اندروید و سایت php
    برای من پروژه خطا نداشت. ولی بعد اجرا که باید پاسخ از سایت می آمد پیام داد که بروسر شما جاوا اسکریپت را پشتیبانی نمی کند.ولی در لوکال درست کار می کند.
    Android MySQL Database Tutorial - Android Login with PHP MySQL
    به فایلی که به پروژه اضافه کرده نگاه کنید:
    کد (Javascript):
    package com.example.programmingknowledge.mysqldemo;
    import android.app.AlertDialog;
    import android.content.Context;
    import android.os.AsyncTask;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    /**
    * Created by ProgrammingKnowledge on 1/5/2016.
    */

    public class BackgroundWorker extends AsyncTask<String,Void,String> {
        Context context;
        AlertDialog alertDialog;
        BackgroundWorker (Context ctx) {
            context = ctx;
        }
        @Override
        protected String doInBackground(String... params) {
            String type = params[0];
            String login_url = "http://192.168.1.6/login.php";
            if(type.equals("login")) {
                try {
                    String user_name = params[1];
                    String password = params[2];
                    URL url = new URL(login_url);
                    HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                    httpURLConnection.setRequestMethod("POST");
                    httpURLConnection.setDoOutput(true);
                    httpURLConnection.setDoInput(true);
                    OutputStream outputStream = httpURLConnection.getOutputStream();
                    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                    String post_data = URLEncoder.encode("user_name","UTF-8")+"="+URLEncoder.encode(user_name,"UTF-8")+"&"
                            +URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(password,"UTF-8");
                    bufferedWriter.write(post_data);
                    bufferedWriter.flush();
                    bufferedWriter.close();
                    outputStream.close();
                    InputStream inputStream = httpURLConnection.getInputStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
                    String result="";
                    String line="";
                    while((line = bufferedReader.readLine())!= null) {
                        result += line;
                    }
                    bufferedReader.close();
                    inputStream.close();
                    httpURLConnection.disconnect();
                    return result;
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
        @Override
        protected void onPreExecute() {
            alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("Login Status");
        }
        @Override
        protected void onPostExecute(String result) {
            alertDialog.setMessage(result);
            alertDialog.show();
        }
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
    }
    این هم یک روش اجرای برنامه های نتی است.
    یعنی مزاحم برنامه اصلی نمی شود. می توانید از قالب فایل فوق برای برنامه های خود استفاده کنید.
    برنامه بالا با یک سایت php ارتباط می گیرد و یوزر و پسورد ارسال می کند و اگر در سایت چنین یوزری باشد خوش آمد می گوید.
    البته من موفق به دیدن خوش آمد آن نشدم چون گفت جاوا اسکریپت بروسر شما فعال نیست. من سایت و دیتابیس و تیبل و یوزر هم ساختم.
    ولی در لوکال کار می کند. ولی IP لوکال در سورس را عوض کنید. در پستهای دیگر گفتیم چطور IP لوکال را بدست آورید.

    کد فایل اصلی برنامه:
    کد (Javascript):
    package com.example.programmingknowledge.mysqldemo;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
    public class MainActivity extends ActionBarActivity {
        EditText UsernameEt, PasswordEt;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            UsernameEt = (EditText)findViewById(R.id.etUserName);
            PasswordEt = (EditText)findViewById(R.id.etPassword);
        }
    public void OnLogin(View view) {
        String username = UsernameEt.getText().toString();
        String password = PasswordEt.getText().toString();
        String type = "login";
        BackgroundWorker backgroundWorker = new BackgroundWorker(this);
        backgroundWorker.execute(type, username, password);
    }
    }
     
    ابزارهای برنامه:
    کد (Javascript):
    <RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
        android:id="@+id/myrl">

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:ems="10"
            android:id="@+id/etUserName"
            android:layout_alignParentTop="true"
            android:layout_marginTop="47dp" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:ems="10"
            android:id="@+id/etPassword"
            android:layout_below="@+id/etUserName"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Login"
            android:id="@+id/btnLogin"
            android:layout_below="@+id/etPassword"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginLeft="48dp"
            android:layout_marginStart="48dp"
            android:layout_marginTop="50dp"
            android:onClick="OnLogin"/>
    </RelativeLayout>
    افزودن پرمیشن به فایل مانیفست:
    کد (Javascript):
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.programmingknowledge.mysqldemo" >
        <uses-permission android:name="android.permission.INTERNET"></uses-permission>"
        <application
            android:allowBackup="
    true"
            android:icon="
    @drawable/ic_launcher"
            android:label="
    @string/app_name"
            android:theme="
    @style/AppTheme" >
            <activity
                android:name="
    .MainActivity"
                android:label="
    @string/app_name" >
                <intent-filter>
                    <action android:name="
    android.intent.action.MAIN" />
                    <category android:name="
    android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
    فایل اتصال به دیتابیس در سایت هدف:
    PHP:
    <?php
    $db_name = "employee101";
    $mysql_username = "root";
    $mysql_password = "";
    $server_name = "localhost";
    $conn = mysqli_connect($server_name, $mysql_username, $mysql_password,$db_name);
    ?>
    صفحه لوگین :
    PHP:
    <?php
    require "conn.php";
    $user_name = $_POST["user_name"];
    $user_pass = $_POST["password"];
    $mysql_qry = "select * from employee_data where username like '$user_name' and password like '$user_pass';";
    $result = mysqli_query($conn ,$mysql_qry);
    if(mysqli_num_rows($result) > 0) {
    echo "login success !!!!! Welcome user";
    }
    else {
    echo "login not success";
    }
    ?>
     
    آخرین ویرایش: ‏30 ژوئن 2019
    نوشته شده توسط saalek110 در ‏28 ژوئن 2019
    the_king از این پست تشکر کرده است.
  4. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    امولیتور برنامه های اندرویدی در ویندوز. a2.png
    من MEmu را نصب کردم. تابحال از bluestacks استفاده می کردم.
    یک apk هم نصب کردم اجرا کرد. بلواستک رم Ram زیاد مصرف میکرد. این هم زیاد مصرف می کنه.
     
    آخرین ویرایش: ‏30 ژوئن 2019
    نوشته شده توسط saalek110 در ‏29 ژوئن 2019
    the_king از این پست تشکر کرده است.
  5. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    طرز یافتن آدرس لوکال برای xampp:
    منبع
    c1.png
    c2.png

    تایپ می کنید: ipconfig و به دنبال IPv4 می گردید. این آدرس را استفاده کنید. بعد ریست عوض میشه. دوباره آدرس بگیرید.
    با xampp می توانید شبکه کار کنید.

    شاید روش درست زدن دکمه Netstat باشد.
     
    آخرین ویرایش: ‏3 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏29 ژوئن 2019
    the_king از این پست تشکر کرده است.
  6. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    کار با حافظه:
    a0.png
    a1.png

    در عکسهای بالا
    در عکس اول طرز یافتن فایل مانیفست
    و در عکس دوم طرز اضافه کردن پرمیشن حافظه نمایش داده شده.
    همچنین در فایل مانیفست می توانیم مینیموم Api مورد نیاز دستگاه هدف را تعیین کنیم. (موقع ایجاد پروژه شما این محدوده را تعین کرده اید.)
    هر چه عدد پایین تری بگیرید دستگاه های بیشتری را پوشش می دهید ولی از بعضی دستورات محروم می شوید. برای من 8 بود به 12 تغییر دادم.من فعلا توصیه ای برای این عدد ندارم. بهتر است به منابع دیگر مراجعه کنید.
     
    نوشته شده توسط saalek110 در ‏30 ژوئن 2019
  7. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    آدرس پوشه ها:
    منبع

    یک پروژه اندرویدی بسازید.
    با کپی کردن 3 ابزار از کد زیر به فایل activity_main.xml شما 3 ابزار به فرم می افزایید. چون می خواهم textView بزرگ و باز باشه با کپی تنظیمات این کد این کار صورت می گیرد:
    کد (Javascript):
    <RelativeLayout 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"
        tools:context="${relativePackage}.${activityClass}" >

    <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true">
            <requestFocus />
        </EditText>
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="120dp"
            android:id="@+id/textView1"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/editText"
            android:layout_above="@+id/button1"
            android:layout_marginTop="10dp" />
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Show"
            android:layout_alignParentBottom="true"
            android:layout_alignLeft="@+id/textView"
            android:layout_alignStart="@+id/textView" />

    </RelativeLayout>

     
    خط زیر:
    کد (Javascript):
    Button bt1;
    داخل کلاس. بلافاصله بعد تعریف کلاس.
    متد کلیک باتون داخل onCreate افزوده شود:
    کد (Javascript):
               bt1 = (Button) findViewById(R.id.button1);
                bt1.setOnClickListener(new View.OnClickListener() { //a
                   @Override
                   public void onClick(View view) {
                       listExternalStorages();        
                   }//onClick
               });//a
    تابع زیر هم جزو کلاس. بیرون onCreate . قبل کروشه آخر.
    کد (Javascript):
    private void listExternalStorages() {
               StringBuilder sb = new StringBuilder();

               sb.append("Data Directory: ").append("\n - ")
                       .append(Environment.getDataDirectory().toString()).append("\n");

               sb.append("Download Cache Directory: ").append("\n - ")
                       .append(Environment.getDownloadCacheDirectory().toString()).append("\n");

               sb.append("External Storage State: ").append("\n - ")
                       .append(Environment.getExternalStorageState().toString()).append("\n");

               sb.append("External Storage Directory: ").append("\n - ")
                       .append(Environment.getExternalStorageDirectory().toString()).append("\n");

               sb.append("Is External Storage Emulated?: ").append("\n - ")
                       .append(Environment.isExternalStorageEmulated()).append("\n");

               sb.append("Is External Storage Removable?: ").append("\n - ")
                       .append(Environment.isExternalStorageRemovable()).append("\n");

               sb.append("External Storage Public Directory (Music): ").append("\n - ")
                       .append(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).toString()).append("\n");

               sb.append("Download Cache Directory: ").append("\n - ")
                       .append(Environment.getDownloadCacheDirectory().toString()).append("\n");

               sb.append("Root Directory: ").append("\n - ")
                       .append(Environment.getRootDirectory().toString()).append("\n");

               Log.i("ExternalStorageDemo", sb.toString());
     
                 TextView  my_textView = (TextView) findViewById(R.id.textView1);
                 my_textView.setText(sb.toString());
           }
    دو تا پرمیشن زیر را هم به فایل مانیفست xml اضافه کنید:
    کد (Javascript):
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    aa.jpg
     
    آخرین ویرایش: ‏30 ژوئن 2019
    نوشته شده توسط saalek110 در ‏30 ژوئن 2019
  8. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    کد زیر:
    از منبع
    کد (Javascript):
    boolean isAvailable= false;
    boolean isWritable= false;
    boolean isReadable= false;
    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state)){
    // Read and write operation possible
      isAvailable= true;
      isWritable= true;
      isReadable= true;
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
       // Read operation possible
          isAvailable= true;
          isWritable= false;
          isReadable= true;
      } else {
          // SD card not mounted
          isAvailable = false;
          isWritable= false;
          isReadable= false; }
     
    آخرین ویرایش: ‏30 ژوئن 2019
    نوشته شده توسط saalek110 در ‏30 ژوئن 2019
  9. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    این دو خط پرمیشن را به مانیفست ایکس ام ال اضافه کنید:
    کد (Javascript):
       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    تعداد 5 عدد تکست ویو به فرم بیافزایید.
    متغیرهای کلاس. در خط اول کلاس درج شود:
    کد (Javascript):
        boolean isAvailable= false;
        boolean isWritable= false;
        boolean isReadable= false;
          TextView  tx1,tx2,tx3,tx4,tx5;
    اینها هم در داخل oncreate:
    کد (Javascript):

            String state = Environment.getExternalStorageState();
            if(Environment.MEDIA_MOUNTED.equals(state)){
            // Read and write operation possible
              isAvailable= true;
              isWritable= true;
              isReadable= true;
            } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
               // Read operation possible
                  isAvailable= true;
                  isWritable= false;
                  isReadable= true;
              } else {
                  // SD card not mounted
                  isAvailable = false;
                  isWritable= false;
                  isReadable= false; }
            tx1 = (TextView) findViewById(R.id.textView1);
           if(   isAvailable == true  )
           {  tx1.setText("isAvailable");  }
           else
           {tx1.setText("Not isAvailable");}
       
           tx2 = (TextView) findViewById(R.id.textView2);
          if(   isWritable == true  )
          {  tx2.setText("isWritable");  }
          else
          {tx2.setText("Not isWritable");}

          tx3 = (TextView) findViewById(R.id.textView3);
         if(   isReadable == true  )
         {  tx3.setText("isReadable");  }
         else
         {tx3.setText("Not isReadable");}
         //----------------------

        tx4 = (TextView) findViewById(R.id.textView4);
        tx4.setText(Environment.getExternalStorageDirectory() .toString());


    tx5 = (TextView) findViewById(R.id.textView5);
    tx5.setText(getExternalFilesDir(null).toString());
     
    a90.jpg
    عکس بالا از امولیتور است ولی در تبلت هم نتیجه همین بود.
     
    آخرین ویرایش: ‏30 ژوئن 2019
    نوشته شده توسط saalek110 در ‏30 ژوئن 2019
  10. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    آخرین ویرایش: ‏30 ژوئن 2019
    نوشته شده توسط saalek110 در ‏30 ژوئن 2019
  11. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    خواندن و نوشتن فایل :
    Android Internal Storage Example Tutorial - JournalDev
    متغیرهای کلاس:
    کد (Javascript):

    Button bt1,bt2;
        EditText textmsg;
    ;
    کلا دو باتون و یک تکست ادیت نیاز دارید.
    کد داخل oncreate: پس یک ادیت تکست به فرم بیافزایید.
    کد (Javascript):
     textmsg=(EditText)findViewById(R.id.editText1);
    دو تابع نوشتن در فایل و خواندن فایل در ادیت تکست:
    کد (Javascript):
     // write text to file
        public void WriteBtn() {
            // add-write text into file
            try {
                FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
                OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
                outputWriter.write(textmsg.getText().toString());
                outputWriter.close();

                //display file saved message
                Toast.makeText(getBaseContext(), "File saved successfully!",
                        Toast.LENGTH_SHORT).show();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    کد (Javascript):

        // Read text from file
        public void ReadBtn() {
            //reading text from file
            try {
                FileInputStream fileIn=openFileInput("mytextfile.txt");
                InputStreamReader InputRead= new InputStreamReader(fileIn);

                char[] inputBuffer= new char[READ_BLOCK_SIZE];
                String s="";
                int charRead;

                while ((charRead=InputRead.read(inputBuffer))>0) {
                    // char to string conversion
                    String readstring=String.copyValueOf(inputBuffer,0,charRead);
                    s +=readstring;
                }
                InputRead.close();
                textmsg.setText(s);
             

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    کد دو باتون که تابع ها را صدا می زنند:دو باتون به فرم بیافزایید.
    کد (Javascript):
                bt1 = (Button) findViewById(R.id.button1);
                bt1.setOnClickListener(new View.OnClickListener() { //a
                   @Override
                   public void onClick(View view) {
                     
                       WriteBtn();
                   }//onClick
               });//a
                bt2 = (Button) findViewById(R.id.button2);
                bt2.setOnClickListener(new View.OnClickListener() { //a
                   @Override
                   public void onClick(View view) {            
                       ReadBtn();
                   }//onClick
               });//a
     
    نوشته شده توسط saalek110 در ‏30 ژوئن 2019
  12. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    نوشتن در حافظه داخلی:
    وقتی گوشی را می خرید دارای مقداری هارد است.یا حافظه. من به اون حافظه داخلی میگم.
    و اگر حافظه اضافه بخرید و در اسلات گوشی یا تبلت بزنید. اون میشه حافظه خارجی.
    چون تعریف های مختلفی هست من تعریف خودم را گفتم تا اشتباه نشود.
    یک پروژه بسازید
    و تابع زیر را به کلاس آن بیافزایید:
    کد (Javascript):
        public void generateNoteOnSD( String sFileName, String sBody) {
            try {
                File root = new File(Environment.getExternalStorageDirectory(), "Notes");
                if (!root.exists()) {
                    root.mkdirs();
                }
                File gpxfile = new File(root, sFileName);
                FileWriter writer = new FileWriter(gpxfile);
                writer.append(sBody);
                writer.flush();
                writer.close();
                Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    یک باتون هم بیافزایید تا تابع را صدا بزنید:
    کد (Javascript):
            bt1 = (Button) findViewById(R.id.button1);
            bt1.setOnClickListener(new View.OnClickListener() { //a
               @Override
               public void onClick(View view) {        
                   generateNoteOnSD( "myfile.txt", "my body of file");
               
               }//onClick
           });//a
    این هم متغیر کلاس:
    کد (Javascript):
    Button bt1;
    ولی برنامه کار نمی کند. پرمیشن را به فایل مانیفست xml اضافه کنید:
    کد (Javascript):
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    منبع

    فایل شما در پوشه Notes در حافظه داخلی است. به کدهای تابع نگاه کنید. کلمه Notes را پیدا می کنید.
     
    آخرین ویرایش: ‏30 ژوئن 2019
    نوشته شده توسط saalek110 در ‏30 ژوئن 2019
    the_king از این پست تشکر کرده است.
  13. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    یک نمونه از Thread:
    با ایجاد یک Thread شروع به شمارش اعداد در Toast می کند. همین طور 2 و 3 و 4 و ... آرام می شمارد.
    منبع
    کد (Javascript):
       private void runThread(){
       
            runOnUiThread (new Thread(new Runnable() {
                public void run() {
                     while(i++ < 1000){
                         Toast.makeText(getApplicationContext(),String.valueOf(i), Toast.LENGTH_LONG).show();
                     }
                }
            }));
        }
    یک تابع است که می توانید آن را صدا بزنید. مثلا در رویداد کلیک باتون.
    و یک متغیر در کلاس تعریف کنید:
    کد (Javascript):
    static int i=1;
     
    آخرین ویرایش: ‏2 جولای 2019
    نوشته شده توسط saalek110 در ‏2 جولای 2019
    the_king از این پست تشکر کرده است.
  14. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    استفاده از WebView:
    ابتدا پرمیشن در فایل مانیفست:
    کد (Javascript):
    <uses-permission android:name="android.permission.INTERNET" />
    افزودن این کد به اکتیویتی مین xml :
    کد (Javascript):
        <WebView
            android:id="@+id/webView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="50dp"
            android:layout_marginLeft="38dp"
            android:layout_toRightOf="@+id/button1" />
    افزودن کد زیر به فایل جاوا داخل oncreate:
    کد (Javascript):
       WebView browser = (WebView) findViewById(R.id.webView1);
            browser.loadUrl("http://www.tutorialspoint.com");
    ولی با زدن لینک ها در بروسر دستگاه باز می کند و نه داخل برنامه ساخته شده ما.
     
    آخرین ویرایش: ‏6 جولای 2019
    نوشته شده توسط saalek110 در ‏5 جولای 2019
    the_king از این پست تشکر کرده است.
  15. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    درود.

    a11.jpg
     
    آخرین ویرایش: ‏6 جولای 2019
    نوشته شده توسط saalek110 در ‏6 جولای 2019
  16. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
  17. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    https://apkpure.com
    سایت دانلود apk است. می توانید سرچ کنید.
    چون امولیتورها و گوگل بد کار می کنند بهتر است خودتان apk را دانلود کنید و بر روی امولیتور نصب کنید.
     
    نوشته شده توسط saalek110 در ‏8 جولای 2019
  18. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    https://apkpure.com/penguin-php-mysql-server/com.bans_droid
    می توانید روی گوشی یا روی امولیتور این برنامه را نصب کنید.
    a1.jpg
    البته برنامه های اندرویدی ساخته شده توسط ما در امولیتور با xampp کار می کرد.
    اما در گوشی:
    محیط شبیه xampp را روی گوشی خواهید داشت. اجرای کدهای php . ساختن دیتابیس و نوشتن در دیتابیس.


    ------------------------------------------
    یک برنامه دیگر که می توانید سرچ کنید و پیدا کنید برنامه ای برای ارسال مقادیر به سایت است. قبلا یک برنامه ساختیم که یوزرنیم و پسورد را به سایت می فرستاد برنامه آماده آن را می توانید دانلود کنید.
     
    آخرین ویرایش: ‏9 جولای 2019
    نوشته شده توسط saalek110 در ‏8 جولای 2019
    the_king از این پست تشکر کرده است.
  19. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    نوشته شده توسط saalek110 در ‏13 جولای 2019
  20. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    یک سایتهای امولیتور آنلاین هم هست که می توانید سرچ کنید و امتحان کنید.
     
    نوشته شده توسط saalek110 در ‏13 جولای 2019

به اشتراک بگذارید