کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Intent در اندروید-بکارگیری intent ها

 

clip_image001

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

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

آموزش Intent در اندروید )قسمت سوم (

 ارزیابی اطلاعات بازگشتی

با بکارگیری متد startActivityForResult () در MainActivity، sub-activity مورد نظر را راه اندازی کنید. این کار به شما اجازه می دهد با استفاده از متد onActivityResult () داده ها را از sub-activity دریافت کنید. داده های extra را با bundle دریافتی (received bundle) استخراج / extract  کنید.

برای این که از دریافت صحیح داده های extra اطمینان لازم را حاصل کنید از یک Toast (toast message) کمک بگیرید. کدی که زیر مشاهده می کنید شما را در این زمینه راهنمایی می کند.

package com.vogella.android.intent.explicit;
       
import
android.app.Activity;
       
import
android.content.Intent;
       
import
android.os.Bundle;
       
import
android.view.View;
       
import
android.widget.EditText;
public class MainActivity extends
Activity {
         
// constant to determine which sub-activity returns
       
  private static final int REQUEST_CODE = 10
;
          @Override
         
public void
onCreate(Bundle savedInstanceState) {
                   
super
.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                  }
                ‎ ‎
                 
public void
onClick(View view) {
                    EditText text = (EditText) findViewById(R.id.inputforintent);
                    String string = text.getText().toString();
                    Intent i =
new Intent(this، ResultActivity.class
);
                    i.putExtra(
"yourkey"،
string);
                   
//
TODO 2.. now use
               
   
// startActivityForResult(i، REQUEST_CODE);
               
  }
                 
// TODO 3 Implement this method
               
 
// assumes that "returnkey" is used as key to return the result
               
  @Override
         
protected void onActivityResult(int requestCode،int
resultCode، Intent data) {
                   
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE
) {
                             
if (data.hasExtra("returnkey"
)) {
                                        String result = data.getExtras().getString(
"returnkey"
);
                                       
if (result != null && result.length() > 0
) {
                                                  Toast.makeText(
this،
result، Toast.LENGTH_SHORT).show();
                                                }
                                      }
                            }
                  }
                }

 9. راه حل : بکارگیریintent  ها

نحوه ی پیاده سازی مطالب این فصل

پس از تکمیل تمرینی که در بخش "هدف این تمرین" به آن پرداختیم، کد activity شما باید چیزی مشابه کلاس های زیر درآید. می توانید با کمک این بخش آموزشی راه حل (solution) خود را با راه حل پیشنهادی مقایسه کنید.

کد  activity

package com.vogella.android.intent.explicit;
       
import android.app.Activity;
       
import android.content.Intent;
       
import android.os.Bundle;
       
import android.widget.EditText;
       
import android.widget.TextView;
public class ResultActivity extends Activity {
          @Override
         
public void onCreate(Bundle bundle) {
                   
super.onCreate(bundle);
                    setContentView(R.layout.activity_result);
                    Bundle extras = getIntent().getExtras();
                    String inputString = extras.getString(
"yourkey");
                    TextView view = (TextView) findViewById(R.id.displayintentextra);
                    view.setText(inputString);
                  }
                    @Override
         
public void finish() {
                    Intent intent =
new Intent();
                    EditText editText= (EditText) findViewById(R.id.returnValue);
                    String string = editText.getText().toString();
                    intent.putExtra(
"returnkey"، string);
                    setResult(RESULT_OK، intent);
                   
super.finish();
                  }
                }
       
package com.vogella.android.intent.explicit;
       
import android.app.Activity;
       
import android.content.Intent;
       
import android.os.Bundle;
       
import android.view.View;
       
import android.widget.EditText;
       
import android.widget.Toast;
public class MainActivity extends Activity {
         
// constant to determine which sub-activity returns
       
  private static final int REQUEST_CODE = 10;
          @Override
         
public void onCreate(Bundle savedInstanceState) {
                   
super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                  }
                 
public void onClick(View view) {
                    EditText text = (EditText) findViewById(R.id.inputforintent);
                    String string = text.getText().toString();
                    Intent i =
new Intent(this، ResultActivity.class);
                    i.putExtra(
"yourkey"، string);
                    startActivityForResult(i،
REQUEST_CODE);
                  }
                  @Override
         
protected void onActivityResult(int requestCode،int resultCode، Intent data) {
                   
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
                             
if (data.hasExtra("returnkey")) {
                                        String result = data.getExtras().getString(
"returnkey");
                                       
if (result != null && result.length() > 0) {
                                                  Toast.makeText(
this،
result، Toast.LENGTH_SHORT).show();
                                                }
                                      }
                            }
                   }
                 }

10. تمرین : ثبت و تخصیص یک activity  به عنوان مرورگر

هدف از این تمرین

در تمرینی که پیش رو دارید، باید یک activity را به عنوان مرورگر ثبت کنید، به عبارتی دیگر، هنگامی که شخصی جهت مشاهده ی URL (که با http آغاز می شود) اقدام کند یک intent فعال و راه اندازی می شود. حال activity ای که شما تخصیص داده اید آماده ی پردازش intent مزبور خواهد بود.

این نمونه activity منبع HTML صفحه ی مورد نظر را دانلود کرده، سپس آن را در یک TextView به نمایش می گذارد.

ساختن پروژه

پروژه ی اندرویدی با نام de.vogella.android.intent.browserfilter ایجاد کرده و activity آن را BrowserAcitivity نام گذاری کنید.

 

ثبت یک  activity به عنوان مرورگر

Activity خود را در  Intent. Action_VIEW و scheme "http" با اعمال تغییرات زیر در فایل AndroidManifest.xml  ثبت کنید. توجه داشته باشید که مانیفست شما باید مجوز دسترسی به اینترنت را داده باشد.

حال فایل layout مربوطه را طبق کد زیر تغییر دهید.

            ‎‎xml version="1.0" encoding="utf-8" ?>

‎‎<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"

               android:orientation="vertical"

               android:layout_width="match_parent"

               android:layout_height="match_parent"

               >

        <textview

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:id="@+id/textView" />

    linearlayout>

 اکنون کلاس activity خود را به کد زیر تغییر دهید.

package de.vogella.android.intent.browserfilter;
        
import java.io.BufferedReader;
       
import java.io.InputStreamReader;
       
import java.net.URL;
       
import android.app.Activity;
       
import android.content.Intent;
       
import android.net.Uri;
       
import android.os.Bundle;
       
import android.os.StrictMode;
       
import android.widget.TextView;
public class BrowserActivity extends Activity {
          @Override
         
public void onCreate(Bundle savedInstanceState) {
                   
super.onCreate(savedInstanceState);
                       
// To keep this example simple‎،‎ we allow network access
               
    // in the user interface thread
               
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                       .permitAll().build();
                    StrictMode.setThreadPolicy(policy);
                      setContentView(R.layout.main);
                    Intent intent = getIntent();
                    TextView text = (TextView) findViewById(R.id.textView);
                   
// To get the action of the intent use
               
    String action = intent.getAction();
                   
if (!action.equals(Intent.ACTION_VIEW)) {
                             
throw new RuntimeException("Should not happen");
                            }
                   
// To get the data use
               
    Uri data = intent.getData();
                    URL url;
                   
try {
                              url =
new URL(data.getScheme()‎،‎ data.getHost()‎،‎ data.getPath());
                              BufferedReader rd =
new BufferedReader(new InputStreamReader(url.openStream()));
                              String line =
"";
                             
while ((line = rd.readLine()) != null) {
                                        text.append(line);
                                      }
                             }
catch (Exception e) {
                              e.printStackTrace();
                            }
                    }
                 }

اعتبارسنجی و تست 

ابتدا برنامه را نصب می کنید. اگر intent ای ویژه ی بازکردن URL فعال کنید، در این صورت کاربر باید بتواند مرورگر سفارشی (پیاده سازی شده به صورت اختصاصی توسط شما) را انتخاب کند. برای این منظور intent زیر را با یکی از برنامه های کاربردی اندروید خود فعال و راه اندازی کنید. این کار را با افزودن (به طور مثال) یک دکمه به اپلیکیشن مورد نظر انجام می دهید که در صورت استفاده از آن، کد فعال شود.

intent = new Intent(Intent.ACTION_VIEW،Uri.parse("http://www.vogella.com"));

startActivity(intent);

در صورت انتخاب مولفه مورد نظر، کد HTML بارگذاری شده و در TextView به نمایش گذاشته می شود.

نمایش کد HTML در textview

 

نمایش کد HTML در textview

 

تمرین بیشتر : تبدیل آن به یک مرورگر واقعی

جهت ایجاد یک مرورگر واقعی، TextView را با WebView جایگزین می کنید. WebView فرایند بارگذاری درخواست HTTP را برای شما انجام می دهد. تنها کافی است URL را با استفاده از متد LoadUrl به آن اختصاص دهید.

11. تمرین : انتخاب تصویر به وسیله ی intent

هدف تمرین

مثال زیر نحوه ی انتخاب تصویر از برنامه های کاربردی ریجیستر شده ی عکس محور (registered photo app) در اندروید )به وسیله ی intent) را نمایش می دهد.

ایجاد پروژه

پروژه ای به نام de.vogella.android.imagepick ایجاد کنید، سپس یک activity به نام ImagePickActivity برای آن در نظر بگیرید.

فایل طرح بندی activity_main.xml را به ترتیب زیر اصلاح کنید.

xml version="1.0" encoding="utf-8" ?>

‎‎<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"

               android:layout_width="match_parent"

               android:layout_height="match_parent"

               android:orientation="vertical">

        <button android:id="@+id/button1"

                  android:layout_width="wrap_content"

                  android:layout_height="wrap_content"

                  android:onclick="pickImage"

                  android:text="Button">

            Button>

            <imageview android:id="@+id/result"

                         android:layout_width="match_parent"

                         android:layout_height="match_parent"

                         android:src="@drawable/icon">

                ImageView>

linearlayout>

 کلاس activity خود را طبق کد زیر اصلاح کنید.

package de.vogella.android.imagepick;
       
import java.io.FileNotFoundException;
       
import java.io.IOException;
       
import java.io.InputStream;
       
import android.app.Activity;
       
import android.content.Intent;
       
import android.graphics.Bitmap;
       
import android.graphics.BitmapFactory;
       
import android.os.Bundle;
       
import android.view.View;
       
import android.widget.ImageView;
 
public class ImagePickActivity extends Activity {
         
private static final int REQUEST_CODE = 1;
         
private Bitmap bitmap;
         
private ImageView imageView;
         
/** Called when the activity is first created. */
            @Override
         
public void onCreate(Bundle savedInstanceState) {
                   
super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
                   
imageView = (ImageView) findViewById(R.id.result);
                  }
                      
public void pickImage(View View) {
                    Intent intent =
new Intent();
                    intent.setType(
"image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                    intent.addCategory(Intent.CATEGORY_OPENABLE);
                    startActivityForResult(intent،
REQUEST_CODE);
                  }
                      @Override
         
protected void onActivityResult(int requestCode،int resultCode، Intent data) {
                    InputStream stream =
null;
                   
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
                     
try {
                               
// recyle unused bitmaps
                       
        if (bitmap != null) {
                                         
bitmap.recycle();
                                        }
                                stream = getContentResolver().openInputStream(data.getData());
                               
bitmap = BitmapFactory.decodeStream(stream);
                                   
imageView.setImageBitmap(bitmap);
                              }
catch (FileNotFoundException e) {
                                e.printStackTrace();
                              }
finally {
                               
if (stream != null)
                                 
try {
                                            stream.close();
                                          }
catch (IOException e) {
                                            e.printStackTrace();
                                          }
                              }
                   }
                 }

 

1394/07/27 4876 3574
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...