Die Anleitung zu Android Intents

View more categories:

1- Die Vorstellung

Das Dokument wird nach der Quelle ... geschrieben
  • Android Studio 1.4

2- Was ist Intent?

Intent (Die Absicht) ist die asynchronen Nachrichten, die die Applikationsteile bei der Anforderung der Funktion aus anderen Android Elemente. Durch  Intents können Sie mit den Elemente aus der Appliaktion so gleich wie mit den in einer anderen Applikation eingepackten Elemente interaktivieren. Zum Beispiel, ein Activity kann ein anderes Activity vom außen um ein Foto zu photographieren 
intent ist das Objekt von der Klasse  android.content.Intent. Ihre Kode kann Intent in dem Android System mit der Festlegung von Zielelemente senden
zum Beispiel: Durch die Methode   startActivity()  können Sie ein  Intent definieren um ein anderen Activity aufzurufen. Bei dem Ziel- Activity können Sie durch die Methode startActivity() die Absicht des Sender bestimmen um das  Activity zu starten.

Ein  Intent kann die Daten durch ein  Bundle enthalten. Die Daten kann durch die Aufnahmenelemente benutzt werden

Wir können Intent  für das folgende Zweck benutzen

  1. Ein Activity beginnen
  2. Ein Sub-Activity beginnen
  3. Ein Dienstleistung (Service) beginnen
Nach dem Forschung über  Intent können Sie detailiert über  Android Service lernen:

3- Die Type vom Intent

Android unterstützt 2 Type von Intent , das sind explizite Intent (explicit) und implizite Intent (implicit).

Ein Applikation kann das Ziel-element direkt in Intent bestimmen (Das angeforderte Ziel ist klar) oder kann das Android System bei der Schatzung der in Zieldaten registrierten Elementen fordern um ein Element, danach die Anforderung gesendet wird, auszuwählen (implizite Intent) 

4- Explizites Intent

Explizite Intent (Explicit intents): ist die Absicht (intent), die den Name der Zielelemente zur Behandlung bestimmt, davon wird das Feld Ziel (eingestellt) eine bestimmte Wert durch die Methode setComponent() oder  setClass().gesetzt
Zum Beispiel: Intent erstellen
// Create the Intent with the target of Greeting Activity.
// Intent(FirstActivity, SecondActivity.class)
Intent intent = new Intent(this,GreetingActivity.class);

// The data attached
intent.putExtra("firstName",firstName);
intent.putExtra("lastName", lastName);

// Start Activity (GreetingActivity)
// (No need feedback from the activity is called)
this.startActivity(intent);


// Start Activity and will have a feedback from the activity is called.
this.startActivityForResult(intent, MY_REQUEST_CODE);
Oder:
// Way 1.
Intent mIntent = new Intent(this, GreetingActivity.class);
Bundle extras = mIntent.getExtras();
extras.putString("firstName", "<firstName>");
extras.putString("látName", "<lastName>");

// Way 2.
Intent mIntent2 = new Intent(this, GreetingActivity.class);
Bundle mBundle = new Bundle();
mBundle.putString("firstName", "<firstName>");
mBundle.putString("látName", "<lastName>");
mIntent2.putExtras(mBundle);

// Way 3:
// Using putExtra()
Intent mIntent3 = new Intent(this, GreetingActivity.class);
mIntent3.putExtra("firstName", "<firstName>");
mIntent3.putExtra("látName", "<lastName>");
Bei dem Ziel-  Activity :
Intent intent = this.getIntent();

String firstName= intent.getStringExtra("firstName");
String lastName = intent.getStringExtra("lastName");

// Or
Bundle extras = this.getIntent().getExtras();

String firstName1 = extras.getString("firstName");
String lastName2  = extras.getString("lastName");
OK, Sie können die einfachen Beispielen unten anschauen

5- Zum Beispiel über das explizite Intent

Das ist das Beipiel
Erstellen Sie ein  "Empty Activity" Projekt mit dem Name von  ExplicitIntentExample:
  • main_activity.xml
Durch dem Doppelklicken auf die Elemente der Interface können Sie ID und  text für sie setzen
EditText 1:
  • ID: text_firstName
  • Properties
    • layout_width: fill_parent
EditText 2:
  • ID: text_lastName
  • Properties
    • layout_width: fill_parent
TextView:
  • ID: text_feedback
  • Text: <Feedback>
  • Properties:
    • layout_width: fill_parent
    • gravity: center_horizontal
Button:
  • ID: button_greeting
  • Text: Show Greeting
  • Properties:
    • onClick: showGreeting
activity_main.xml
<?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">

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text_firstName"
        android:layout_alignParentTop="true"
        android:layout_marginTop="66dp"
        android:layout_centerHorizontal="true" />

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text_lastName"
        android:layout_below="@+id/text_firstName"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Greeting"
        android:id="@+id/button_greeting"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="132dp"
        android:onClick="showGreeting" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="&lt;Feedback>"
        android:id="@+id/text_feedback"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="59dp"
        android:gravity="center_horizontal" />

</RelativeLayout>

 
Wenn der Benutzer auf Button klickt, ruft das Programm nach einem anderen  Activity zur Begrüßungsanzeige auf. Sie sollen ein anderes  Activity mit dem Name von GreetingActivity.erstellen
  • File/New/Activity/Empty Activity
  • activity_greeting.xml
Die Attribute für die Elemente in der Interface ändern
TextView
  • ID: text_greeting
  • Text: <Greeting>
  • Properties:
    • layout_width: fill_parent
    • gravity: center_horizontal

Button:
  • ID: button_back
  • Properties
    • onClick: backClicked
activity_greeting.xml
<?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="org.o7planning.explicitintentexample.GreetingActivity">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="&lt;Greeting>"
        android:id="@+id/text_greeting"
        android:layout_marginBottom="65dp"
        android:layout_above="@+id/button_back"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:gravity="center_horizontal" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Back"
        android:id="@+id/button_back"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="backClicked" />
</RelativeLayout>
 
MainActivity.java
package org.o7planning.explicitintentexample;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

   private EditText textFirstName;
   private EditText textLastName;
   private TextView textFeedback;

   public static final int MY_REQUEST_CODE = 100;

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

       this.textFirstName = (EditText)this.findViewById(R.id.text_firstName);
       this.textLastName = (EditText)this.findViewById(R.id.text_lastName);
       this.textFeedback = (TextView)this.findViewById(R.id.text_feedback);
   }

   // When 'Greeting Activity' completed, it sends back a feedback.
   // (If you have started it by startActivityForResult())
   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       if (resultCode == Activity.RESULT_OK && requestCode == MY_REQUEST_CODE ) {
           String feedback = data.getStringExtra("feedback");
           this.textFeedback.setText(feedback);
       } else {
           this.textFeedback.setText("!?");
       }
   }

   // The method is called when the user clicks on "Show Greeting" button.
   public void showGreeting(View view)  {
        String firstName= this.textFirstName.getText().toString();
        String lastName= this.textLastName.getText().toString();

       Intent intent = new Intent(this,GreetingActivity.class);
       intent.putExtra("firstName", firstName);
       intent.putExtra("lastName", lastName);

       // Start Activity and no need feedback.
       // this.startActivity(intent);

       // Start Activity and get feedback.
       this.startActivityForResult(intent, MY_REQUEST_CODE);
   }

}
GreetingActivity.java
package org.o7planning.explicitintentexample;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class GreetingActivity extends AppCompatActivity {

   private String firstName;
   private String lastName;

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

       // Intent is passed into
       Intent intent = this.getIntent();

       this.firstName= intent.getStringExtra("firstName");
       this.lastName = intent.getStringExtra("lastName");

       String greeting = "Hello "+ firstName+" "+ lastName;

       TextView textGreeting =(TextView) this.findViewById(R.id.text_greeting);

       textGreeting.setText(greeting);
   }

   // When completed this Activity, send feedback to the caller.
   @Override
   public void finish() {
       // Prepare data intent
       Intent data = new Intent();
       data.putExtra("feedback", "I'm "+ this.firstName+", Hi!");
       // Activity finished ok, return the data
       this.setResult(Activity.RESULT_OK, data);
       super.finish();
   }


   // The method is called when the user clicks the Back button.
   public void backClicked(View view)  {
       // Calling onBackPressed().
       // Gọi phương thức onBackPressed().
       this.onBackPressed();
   }

 
}
Die Applikation starten:

6- Der Intent-Filter (Intent Filter)

Wenn Sie ein Activity oder eine  Service erstellen, sollen Sie sie mit AndroidManifest.xml melden. Normaleweise wenn Sie sie mit der Hilfe von wizard in  Android Studio erstellen, wird die Registriereungscode automatisch in AndroidManifest.xml erstellt.  Zum Beispiel
Sie können finden, dass es in der Meldung von  Activity in  AndroidManifest.xml den Tag <intent-filter> geben kann. Dieser Tag wird benutzt, um die Intentstype, die nach dem Activity geschickt werden und von dem Activity akzeptiert werden, anzudeuten 
Wenn Sie ein implizite Inten (Implicit Intent) erstellen, sucht das System  Android die angemessenen Elemente durch den Vergleich zwischen die Inhalt der Intent und der Filter der Intent, die in der File manifest der anderen Applikation des Gerät meldet wird. Wenn Intent dem Intenfilter entspricht, startet das System die Elemente und überträgt ins Intentobjekt 
Das Beispiel
** AndroidManifest.xml **
.....

<activity android:name=".HelloWorld"
   android:label="@string/app_name">
   <intent-filter>
       <action android:name="android.intent.action.VIEW"/>
       <category android:name="android.intent.category.DEFAULT"/>
       <category android:name="android.intent.category.BROWSABLE"/>
       <data android:scheme="http" android:host="o7planning.org"/>
   </intent-filter>
</activity>

...
Zum Beispiel: Erstellen Sie ein Implicit Intent, das auf dem oben Activity rufen kann (Es entspricht dem Filter Intent).
// An implicit intent, requested to view a URL

Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse("http://o7planning.org"));
startActivity(intent);

7- Das implizite Intent 

Implizite Intent (implicit Intents): sind die Absicht (Intent), die kein Zielelement bestimmen aber alle vollen Informationen stehen  zur Verfügung, damit das System die besten Elementen zur Zieldurchführung festlegen kann. Bitte schauen Sie eine Applikation zur Listierung aller Restaurant in der Nähe von Ihnen an. Wenn Sie auf ein gewähltes Restaurant klicken, fragt die Applikation einer anderen Applikation nach der Routen zum Restaurant. Um diese Dinge zu schaffen, kann sie der Applikation Google Maps eine klare Absicht direkt schicken oder eine implizite Absicht schicken. Die Absicht wird für alle Applikation übergetragt, die die Landkarten (map) bieten (Z.B Yahoo Maps

8- Das einfache Beispiel über das implizite Intent

Ein folgend einfaches Beispiel: Wenn Sie auf einen  Button zum Öffnen einer URL Website klicken, erstellen Sie eine implizite Intent. Intent wird zum Android geschickt, damit das System auf welcher Browser zu öffnen wählt. Vielleicht gibt es in Ihrem Gerät vielen unterschiedlichen Browser (Firefox, Chrome...) und das Gerät wird die Website auf einem Default-Browser oder Ihrem beliebten Browser öffnen.
Außerdem schließt das Beipeil ein:
  • Email senden
Erstellen Sie ein Android Projekt mit dem Name von "ImplicitIntentExample".
Setzen Sie  ID, text und die Attribute für den Button:
Button 1:
  • ID: button_google
  • Text: Go Google
  • Properties:
    • onClick: goGoogle
Button 2:
  • ID: button_email
  • Text: Send Email
  • Properties:
    • onClick: sendEmail
activity_main.xml
<?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">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go Google"
        android:id="@+id/button_google"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="86dp"
        android:onClick="goGoogle" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Send Email"
        android:id="@+id/button_email"
        android:layout_below="@+id/button_google"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="45dp"
        android:onClick="sendEmail" />

</RelativeLayout>

 
MainActivity.java
package org.o7planning.implicitintentexample;

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

public class MainActivity extends AppCompatActivity {


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

   // The method is called when the user clicks on "Go Google" button.
   public void goGoogle(View view)  {
       String url="http://google.com";

       // An implicit intent, request a URL.
       Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
       this.startActivity(intent);
   }

   // The method is called when the user clicks on "Send Email" button.
   public void sendEmail(View view)  {

       // List of recipients
       String[] recipients=new String[]{"friendemail@gmail.com"};

   
       String subject="Hi, how are you!";

     
       String content ="This is my test email";

       Intent intentEmail = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
       intentEmail.putExtra(Intent.EXTRA_EMAIL, recipients);
       intentEmail.putExtra(Intent.EXTRA_SUBJECT, subject);
       intentEmail.putExtra(Intent.EXTRA_TEXT, content);

       intentEmail.setType("text/plain");

       startActivity(Intent.createChooser(intentEmail, "Choose an email client from..."));
   }



}
Die Applikation laufen
  • Send Email  (VIEW SLIDER).

9- Das Beispiel über das implizite Intent, ein Foto aus Camera machen und auf Foto-File schreiben

Ein Beispiel mit dem Implicit  Intent: Wenn Sie auf den Button klicken, sendet die Applikation dem Android System eine Forderung nach der Photographierung aus Camera und schreiben die Foto-File in einem Ordner auf 

View more categories: