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

saalek110

Well-Known Member
برنامه دانلود و نمایش عکس:
منبع:
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

Well-Known Member
نتیجه اجرا:
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 این برنامه استفاده کنید و تمرین کنید.
نگاه کنید این برنامه از کلاسها و تابع های اندروید چطور استفاده کرده.
 
آخرین ویرایش:

saalek110

Well-Known Member
Android MySQL Database Tutorial – Android Login with PHP MySQL

این سایت هم برای ارتباط اندروید و سایت php
برای من پروژه خطا نداشت. ولی بعد اجرا که باید پاسخ از سایت می آمد پیام داد که بروسر شما جاوا اسکریپت را پشتیبانی نمی کند.ولی در لوکال درست کار می کند.
Android MySQL Database Tutorial - Android Login with PHP MySQL
به فایلی که به پروژه اضافه کرده نگاه کنید: ( در پست 51 همین تاپیک گفته بودیم چطور یک فایل جاوای دیگر بیافزاییم. به جای کلمه BackgroundWorker اسم فایل دوم خود را قرار دهید.نام کلاس و اسم فایل یکی است.)
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";
}
?>

در پست 51 همین تاپیک گفته بودیم چطور یک فایل جاوای دیگر بیافزاییم.

سال 1400 که خواستم از این برنامه استفاده کنم کار نمی کرد. یک باتون به برنامه اضافه کردم و کد زیر را درون آن قرار دادم:
کد:
               String type = "login";
               backgroundWorker.execute(type, "hh", "h22h");
این خط کد را هم:
کد:
 BackgroundWorker backgroundWorker = new BackgroundWorker(this);
زیر این خط قرار دادم:
کد:
public class MainActivity extends Activity {
چون داخل رویداد باتون اررور میداد.
برنامه اجرا شد و با لوکال کار کرد. ولی با سایتها کار نمی کند و پیام میده باید بروسر شما جاوا اسکریپت را پشتیبانی کند.
 
آخرین ویرایش:

saalek110

Well-Known Member
امولیتور برنامه های اندرویدی در ویندوز.a2.png
من MEmu را نصب کردم. تابحال از bluestacks استفاده می کردم.
یک apk هم نصب کردم اجرا کرد. بلواستک رم Ram زیاد مصرف میکرد. این هم زیاد مصرف می کنه.
 
آخرین ویرایش:

saalek110

Well-Known Member
طرز یافتن آدرس لوکال برای xampp:
منبع
c1.png
c2.png

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

شاید روش درست زدن دکمه Netstat باشد.
 
آخرین ویرایش:

saalek110

Well-Known Member
کار با حافظه:
a0.png
a1.png

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

saalek110

Well-Known Member
آدرس پوشه ها:
منبع

یک پروژه اندرویدی بسازید.
با کپی کردن 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
 
آخرین ویرایش:

saalek110

Well-Known Member
کد زیر:
از منبع
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; }
 
آخرین ویرایش:

saalek110

Well-Known Member
این دو خط پرمیشن را به مانیفست ایکس ام ال اضافه کنید:
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
عکس بالا از امولیتور است ولی در تبلت هم نتیجه همین بود.
 
آخرین ویرایش:

saalek110

Well-Known Member
خواندن و نوشتن فایل :
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

Well-Known Member
نوشتن در حافظه داخلی:
وقتی گوشی را می خرید دارای مقداری هارد است.یا حافظه. من به اون حافظه داخلی میگم.
و اگر حافظه اضافه بخرید و در اسلات گوشی یا تبلت بزنید. اون میشه حافظه خارجی.
چون تعریف های مختلفی هست من تعریف خودم را گفتم تا اشتباه نشود.
یک پروژه بسازید
و تابع زیر را به کلاس آن بیافزایید:
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 را پیدا می کنید.
 
آخرین ویرایش:

saalek110

Well-Known Member
یک نمونه از 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;
 
آخرین ویرایش:

saalek110

Well-Known Member
استفاده از 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");
ولی با زدن لینک ها در بروسر دستگاه باز می کند و نه داخل برنامه ساخته شده ما.
 
آخرین ویرایش:

saalek110

Well-Known Member
https://apkpure.com
سایت دانلود apk است. می توانید سرچ کنید.
چون امولیتورها و گوگل بد کار می کنند بهتر است خودتان apk را دانلود کنید و بر روی امولیتور نصب کنید.
 

saalek110

Well-Known Member
https://apkpure.com/penguin-php-mysql-server/com.bans_droid
می توانید روی گوشی یا روی امولیتور این برنامه را نصب کنید.
a1.jpg
البته برنامه های اندرویدی ساخته شده توسط ما در امولیتور با xampp کار می کرد.
اما در گوشی:
محیط شبیه xampp را روی گوشی خواهید داشت. اجرای کدهای php . ساختن دیتابیس و نوشتن در دیتابیس.


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

saalek110

Well-Known Member
یک سایتهای امولیتور آنلاین هم هست که می توانید سرچ کنید و امتحان کنید.
 

جدیدترین ارسال ها

بالا