نوشته‌ها

اتصال به سرور در اندروید

اتصال به سرور در اندروید

در ابتدا کارpermission  مربوطه را در فایل AndroidManifest.xml اضافه می‌کنیم:

<uses-permission android:name=”android.permission.INTERNET” />

 بعد  یک دکمه می‌سازیم تا کد مربوط به اتصال را درون آن بنویسیم.

 

و متغیر  و دکمه را در MainActivity  تعریف می‌کنیم:

 

public class MainActivity extends AppCompatActivity {
public static String dataServer=””;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnServer =(Button)findViewById(R.id.btnServer);
}
}

 

 

 

یک جاوا کلاس با نام Conn.java می‌سازیم:

import android.os.AsyncTask;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
* Created by alizadeh-ma on 01/03/2018.
*/

public class Conn   extends AsyncTask{
public String link=””;

public Conn(String link)  {
this.link=link;
}

@Override
protected Object doInBackground(Object[] objects){
try{

          URL url=new URL(link);
URLConnection connection =url.openConnection();
BufferedReader bufferedreader =new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder stringBuilder=new StringBuilder();
String data = null;
while ((data=bufferedreader.readLine())!=null){
stringBuilder.append(data);
}
MainActivity.dataServer =stringBuilder .toString();
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
}

حالا کد اتصال را در هنگام کلیک دکمه فراخوانی می‌کنیم:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
public static String dataServer=””;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Conn(“http://webenik.com/android/index.php”).execute();
Button btnServer =(Button)findViewById(R.id.btnServer);
btnServer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// کدهای بعد از اتصال
}
});

             }
}

ارسال و دریافت SMS در اندروید

ارسال و دریافت SMS در اندروید

 

اولین کاری  که برا ی نوشتن کد مربوط به ارسال sms باید انجام داد اضافه کردن permission مربوطه به فایل AndroidManifest.xml است.

: کدهای زیر را رای ارسال و دریافت اس ام اس اضافه میکنیم

<uses-permission android:name=”android.permission.SEND_SMS” />

<uses-permission android:name=”android.permission.RECEIVE_SMS” />

در اکتیویتی مربوطه دو  EditText  برا ی گرفتن شماره تلفن و پیغامی که میخوهید ارسال کنید و همچنین دکمه‌ای برای ارسال ایجاد می‌کنیم. مانند شکل زیر:

و کدهای زیر به اکتیویتی اضافه می‌کنیم.

public class MainActivity extends Activity {

   private static final int MY_PERMISSIONS_REQUEST_SEND_SMS =0 ;

   Button sendBtn;

   EditText txtphoneNo;

   EditText txtMessage;

   String phoneNo;

   String message;

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      sendBtn = (Button) findViewById(R.id.btnSendSMS);

      txtphoneNo = (EditText) findViewById(R.id.editText);

      txtMessage = (EditText) findViewById(R.id.editText2);

      sendBtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            phoneNo = txtphoneNo.getText().toString();

            message = txtMessage.getText().toString();

            smsManager.sendTextMessage(phoneNo, null, message, null, null);

         }

      });

   }

البته این کد که نوشتیم ساده‌ترین شکل ارسال اس ام اس‌ه.

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

protected void sendSMSMessage() {

      phoneNo = txtphoneNo.getText().toString();

      message = txtMessage.getText().toString();

      if (ContextCompat.checkSelfPermission(this,

         Manifest.permission.SEND_SMS)

         != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(this,

               Manifest.permission.SEND_SMS)) {

            } else {

               ActivityCompat.requestPermissions(this,

                  new String[]{Manifest.permission.SEND_SMS},

                  MY_PERMISSIONS_REQUEST_SEND_SMS);

            }

      }

   }

 

   @Override

   public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {

      switch (requestCode) {

         case MY_PERMISSIONS_REQUEST_SEND_SMS: {

            if (grantResults.length > 0

               && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                  SmsManager smsManager = SmsManager.getDefault();

                  smsManager.sendTextMessage(phoneNo, null, message, null, null);

                  Toast.makeText(getApplicationContext(), “SMS sent.”,

                     Toast.LENGTH_LONG).show();

            } else {

               Toast.makeText(getApplicationContext(),

                  “SMS faild, please try again.”, Toast.LENGTH_LONG).show();

               return;

            }

         }

      }

   }

}

 

این متد (sendSMSMessage()) را تو اون قسمتی که ما کد ارسال اس ام اس رو نوشتیم فراخوانی می‌کنیم.

 

خوب میرسیم به دریافت اس ام اس. این بخش کمی داستانش فرق میکنه. اول باید با یه مفهومی به نام Broadcast آشنا بشیم.

BroadcastReceiver در حقیقت سرویس و یا امکانیست که شما آنرا مامور می‌کنید در صورت بروز یک رخداد یک عکس‌العملی نشان دهد.می‌تونید برای درک بهتر با استراق سمع مقایسه کنید.یعنی منتظر میشینه به محض اینکه یک اتفاق خاص مد‌نظرما افتاد یک کاری انجام دهد.

BroadcastReceiver هم یه همچین حالتیه.مثلا شما تعریف می‌کنید که اگر مثلا گوشی شما در معرض امواج وای‌فای قرار گرفت از شما سوال کنه که می‌خواهید به آن متصل بشید یا نه؟کل موضوع همینه.حالا می‌خواهیم با BroadcastReceiver یه برنامه بنویسیم به محض اینکه یک پیغام به گوشی آمد پیام بده.حال سوالی که پیش می‌آید اینه که آیا لازمه برنامه ما برای اینکه پیام را دریافت کند باید همیشه در حال اجرا باشد.نه نیاز نیست .فقط کافیه یکبار برنامه نصب بشه و یکبار اجرا بشه.حالا اگر برنامه را ببندید BroadcastReceiver در حفظه گوشی آماده باشه.اینکه شما چه برخوردی با دریافت پیام بکنید به خودتان بستگی دارد.مثلا می‌تونید تعریف کنید که اگر یک اس‌ام‌اس از یک شماره خاص اومد آلارم اخطار بده و یا نمایش نده و یا هر کار دیگه‌ای.

خوب میریم سراغ کد مربوط به اینکار:

یه کلاس جدید با نام دلخواه خودتون ایجاد می‌کنید.ما اینجا اسمشو میذاریم Receiver.

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver  {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(G.context,”SMS RECEIVE”,Toast.LENGTH_LONG).show();
}
}

ابتدا باید این کلاس را در فایل AndroidManifest.xml تعریف کنیم و کدهای زیر را به تگ  application اضافه کنیم.

<receiver android:name=”.Receiver” >
<intent-filter >
<action android:name=”android.provider.Telephony.SMS_RECEIVED”></action>
</intent-filter>
</receiver>

 

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

خوب داخل همون کلاس Receiver که ساخته بودیم کدهای زیر را قرار می‌دهیم.

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver  {

@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();

     if (bundle!=null){
Object[] objects=(Object[]) bundle.get(“”);
for(int i=0 ; i < objects.length;i++){
SmsMessage message= SmsMessage.createFromPdu((byte[])objects[i]);
String num=message.getDisplayOriginatingAddress();
String mess=message.getDisplayMessageBody();
Toast.makeText(G.context,”  “+num+” “+mess,Toast.LENGTH_LONG).show();
}
}

}

 

 

 

 

فعال کردن قالب متریال دیزاین در اندروید استودیو

فعال کردن قالب  متریال دیزاین در اندروید استودیو

 

برای اینکه بتوانید تم material design را تو اپلیکیشن اندرویدی که دارید می‌نویسید فعال کنید و ازش استفاده کنید مراحل زیر را دنبال کنید:

  1. یک پروژه جدید تو اندروید استودیو ایجاد کنید.زمانیکه نوع اکیتیویتی را از شما سوال می‌کند Blank Activity را انتخاب بکنید.

 

  1. gradle را از ستون کناری اندروید استودیو باز کنید و کتابخانه‌ای که android design را پشتیبانی می‌کند به نام com.android.support:design:23.0.1 را اضافه کنید.مانند کد زیر:

build.gradle

dependencies {

compile fileTree(dir: ‘libs’, include: [‘*.jar’])

compile ‘com.android.support:appcompat-v7:23.0.1’

compile ‘com.android.support:design:23.0.1’

}

و همینطور اینکار را میتوان هم در Project Structure  انجام داد مانند تصویر زیر:

 

 

که کتابخانه  com.android.support:design:23.1.1  را از با زدن دکمه + از لیست انتخاب کرده و اضافه میکنیم و پنجره را می‌بندیم.

 

  1. فایل xml را از مسیر res values باز کنید و مقادیر زیر را به آن اضافه کنید.

colors.xml

<?xml version=”1.0″ encoding=”utf-8″?>

<resources>

<color name=”colorPrimary”>#125688</color>

<color name=”colorPrimaryDark”>#125688</color>

<color name=”textColorPrimary”>#FFFFFF</color>

<color name=”windowBackground”>#FFFFFF</color>

<color name=”navigationBarColor”>#000000</color>

<color name=”colorAccent”>#c8e8ff</color>

</resources>

  1. فایل xml را از مسیر res values باز کنید و استایل‌های زیر را به آن اضافه کنید.

من نام تم متریال دیزاین را MyMaterialTheme گذاشتم.

styles.xml

<resources>

<style name=”MyMaterialTheme” parent=”MyMaterialTheme.Base”>

</style>

<style name=”MyMaterialTheme.Base” parent=”Theme.AppCompat.Light.DarkActionBar”>

<item name=”windowNoTitle”>true</item>

<item name=”windowActionBar”>false</item>

<item name=”colorPrimary”>@color/colorPrimary</item>

<item name=”colorPrimaryDark”>@color/colorPrimaryDark</item>

<item name=”colorAccent”>@color/colorAccent</item>

</style>

</resources>

  1. حالا در همون فولدر res ؛ فولدری با نام values-v21 بسازید و  فایل xml را در فولدر جدید ایجاد کنید.

 

و مقادر زیر را در آن قرار دهید.

styles.xml

<resources>

<style name=”MyMaterialTheme” parent=”MyMaterialTheme.Base”>

<item name=”android:windowContentTransitions”>true</item>

<item name=”android:windowAllowEnterTransitionOverlap”>true</item>

<item name=”android:windowAllowReturnTransitionOverlap”>true</item>

<item name=”android:windowSharedElementEnterTransition”>@android:transition/move</item>

<item name=”android:windowSharedElementExitTransition”>@android:transition/move</item>

</style>

</resources>

 

  1. درنهایت فایل AndroidManifest.xml را باز کنید و مقدار android:theme را به تم جدید تغییر دهید.

 

 

android:theme=”@style/MyMaterialTheme”

AndroidManifest.xml

<?xml version=”1.0″ encoding=”utf-8″?>

<manifest xmlns:android=”http://schemas.android.com/apk/res/android

package=”info.androidhive.materialtabs” >

<application

android:allowBackup=”true”

android:icon=”@mipmap/ic_launcher”

android:label=”@string/app_name”

android:theme=”@style/MyMaterialTheme” >

<activity

android:name=”.activity.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>

 

 

اپلیکیشن را اجرا کنید و رنگ  notification bar را مشاهد کنید.اگر رنگ notification bar تغییر کرده باشد معنی آن اینست که قالب متریال دیزاین با موفقیت اعمال شده است.