アンドロイドは意図し、対応する構成要素を見つけるための責任を、追加のデータは、アンドロイドは、このインテント記述に基づいて記載されているアプリケーションとの間の相互作用および通信を補助する意図機構、1回の操作でアプリケーションの動作のために意図責任、アクション含むデータを、提供します呼び出し側コンポーネントに渡され、コンポーネントへの呼び出しを完了します。その意図は、アプリケーション間で使用できるだけでなく内部アプリケーションアクティビティ/サービス間の相互作用のためにも使用することができます。したがって、ここでの意図は、呼び出し元と呼び出し先の間のデカップリングを達成するためにお互いを呼ばれるコンポーネントに関する情報を提供に特化したメディアの仲介の役割を果たしています。
1.意図的役割
意図は、一般的には、パラメータ、様々なコンポーネントAndroidの間の通信を支援する意図として使用され、実行される動作の抽象的記述です。)/ bindserviceを、例えば、startActivity()を呼び出すアクティビティを開始する、または興味BroadcaseReceiver全てにbroadcaseIntent()によって送達され、その後、又はSTARTSERVICE(バックグラウンドサービスを開始します()。それは、見ることができるインテントを主な活動または他のサービスを開始するために使用され、意図は、活動の間の接着剤として理解することができます。
行動の意図形式は次のとおりです。
- スタート活動
開始Context.startActvity()によって活性/ Activity.startActivityForResult();
- サービス開始
Context.startServiceによってスタート()サービス、またはContext.bindService()とバックオフィスサービスの相互作用により、
- ブロードキャストを送信
放送受信機は、放送方式Context.sendBroadcasts()/ Context.sendOrderedBroadcast()/ Context.sendStickyBroadcast()によって配布しました
2.テントの種
- 明示的な意図
明示的、すなわち活動に対応する直接開くには、クラスのニーズを指定します。
1)コンストラクタは、コンポーネント、最も一般的な方法を渡します。
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
2)setComponent方法
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
//或者intent.setClassName(this, "com.example.app.SecondActivity");
//或者intent.setClassName(this.getPackageName(),"com.example.app.SecondActivity");
startActivity(intent);
3)setClass / setClassName方法
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
//或者intent.setClassName(this, "com.example.app.SecondActivity");
//或者intent.setClassName(this.getPackageName(),"com.example.app.SecondActivity");
startActivity(intent);
意図明示的に設定Activityクラスを一意ので、明示的な意図特に明確な活性を、識別することができ、コンポーネントによって直接呼び出す必要があるかもしれません。このように設定すると、クラスのクラスオブジェクト(例えばSecondActivity.class)であってもよい、クラス名(例えば、「com.example.app.SecondActivity」)パッケージの文字列名に加えてもよいです。
- 暗黙インテント
暗黙的、明示的に開始するためにどの活動を指定しますが、アクション、データ、カテゴリーを設定し、適切な活動からフィルタにシステムを許可しません。スクリーニングは、すべてに基づいています
アクション以下は、例えば:
AndroidManifest.xmlファイルには、最初に活動が呼び出されなければなりません
<activity
android:name="com.example.app.SecondActivity">
<intent-filter>
<action android:name="mark"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
その後、MainActivityに、あなたはアクション名でトップのアクティビティを見つけることができます。次の2つの方法がSetActionはアクションや工法、2つの方法でも同様の効果によって提供されています。
1)SetActionは方法
Intent intent = new Intent();
intent.setAction("mark");
startActivity(intent);
直接2)アクションコンストラクタ
Intent intent = new Intent("mark");
startActivity(intent);
アプリケーション間の相互の影響を防ぐために、一般的に名前を命名+アクションは、例えば、ここでは「マーク」という名前のパッケージ名は、それが「com.example.app.Test」に変更する必要があり、非常に不合理されています。
3.意図プロパティ
アクション(行動)、データ(データ)、カテゴリ(カテゴリ)、タイプ(データの種類)、コンポーネント(構成要素)、追加(拡張情報)、フラグ(フラグ):インテントオブジェクトは、一般的に7つの属性を含みます。最も一般的に使用されるデータプロパティとアクションプロパティです。
- アクション:アクションは意思表示します
文字列変数、クラスが意図実行されるアクションを指定するために使用することができます。一般的なアクションです。
アクティビティアクション:
タイプ | 効果 |
---|---|
ACTION_MAIN | これは、プログラムのエントリを表し |
ACTION_VIEW | データは自動的に最も適切な方法で表示されます |
ACTION_EDIT | 編集できるように提供 |
ACTION_PICK | 1データ、戻り、それを選択します |
ACTION_DAIL | データポイントはDailerインターフェイス、ダイヤル上の番号を表示します |
ACTION_CALL | データは、番号をダイヤルする指摘しました |
ACTION_SEND | データは、指定された場所に送信されます |
ACTION_SENDTO | データは複数のグループ指定された場所に送信されます |
ACTION_RUN | ファイル名を指定して実行、データ、データが何であるかに関係なく、 |
ACTION_SEARCH | 検索を実行 |
ACTION_WEB_SEARCH | オンライン検索を実行 |
ACRION_SYNC | データの同期を行います |
ACTION_INSERT | 空の容器に項目を追加 |
ブロードキャストアクション:
タイプ | 効果 |
---|---|
ACTION_TIME_TICK | 現在の時刻を変更し、リアルタイム伝送時間は、システムを介して送信することができます。コールフォーマット「android.intent.action.TIME_TICK」 |
ACTION_TIME_CHENGED | 時間を設定します。コールフォーマット「android.intent.action.TIME_SET」 |
- データ:操作を示すデータを操作します
URIオブジェクトは、参照データの現れである、またはデータMIMEタイプ、データのタイプは、意図作用によって決定されます。
- ジャンル:アクションのための性能カテゴリー
テントを処理するコンポーネントの種類を示す追加情報が含まれているテントの文字列。カテゴリーの説明任意の数のテントに追加することができますが、意図カテゴリの多くを必要としない、次のようにいくつかの一般的なカテゴリーであります:
タイプ | 効果 |
---|---|
CATEGORY_DEFAULT | セットには、コンポーネントのコンポーネント暗黙的に開始することができます |
CATEGORY_LAUNCHER | アクションは、トップレベルの実行に設定されています。そして、あって活動アイコンこの属性は、置換基定義されたアプリケーションのアイコンを定義し |
CATEGORY_BROWSABLE | 意図ポイントをネットワークが関連するときは、このカテゴリを追加する必要があります |
CATEGORY_HOME | ホーム画面への意思ポイント |
CATEGORY_PREFERENCE | 活動は、環境設定パネルの設定パネルの定義です |
- タイプ:指定したデータの種類
意図一般的なデータタイプはデータ自体に基づいて決定することができるが、このプロパティを設定することで、代わりに指定されたタイプの明示的な導出を強制することができます。
- コンポーネント:汎用コンポーネント
意図指定された目標コンポーネント名、属性が指定されている場合、システムは直接、対応するコンポーネントを起動するために、他の属性が一致して整合性をスキップします。
- エクストラ:拡張情報
追加のキーと値のデータテント缶キャリーは、データ値にputExtra()メソッドは、各キーの対応を呼び出してデータを設定することができます。また、バンドルオブジェクトを作成することによって、すべてのデータを保存し、その後putExtras()メソッドを呼び出してデータを設定することができます。
タイプ | 効果 |
---|---|
EXTRA_BCC | 保存メールアドレス文字列配列のBcc |
EXTRA_CC | 文字列の配列のカーボンコピーを保存E-mailアドレス |
EXTRA_EMAIL | 文字列の配列の電子メールアドレスを保存 |
EXTRA_SUBJECT | メッセージの件名の文字列を格納します |
EXTRA_TEXT | メッセージの内容を保存します |
EXTRA_KEY_EVENT | 店舗へのKeyEventの方法は、トリガーボタンの意図をオブジェクト |
EXTRA_PHONE_ NUMBER | 電話番号は通話を保存ACTION_CALL |
旗:所望の動作モードの意図
システムアクティビティを開始する方法を示すために使用される、フラグラベルはでsetFlagsによってインテントに使用することができる()またはaddFlags()。
タイプ | 効果 |
---|---|
FLAG_ACTIVITY_CLEAR_TOP | 等価SingleTask |
FLAGE_ACTIVITY_SINGLE_TOP | 等価SingleTop |
FLAG_ACTIVITY_NEW_TASK | 同様のSingleInstance |
FLAG_ACTIVITY_NO_HISTORY | 活動を去った後、アクティビティ、タスクスタックから削除されます |
4.テントの使用
コールダイヤラ
// 调用拨打电话,给10010拨打电话
Uri uri = Uri.parse("tel:10010");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
// 直接拨打电话,需要加上权限 <uses-permission id="android.permission.CALL_PHONE" />
Uri callUri = Uri.parse("tel:10010");
Intent intent = new Intent(Intent.ACTION_CALL, callUri);
SMSやMMSを送信
// 给10010发送内容为“Hello”的短信
Uri uri = Uri.parse("smsto:10010");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent);
// 发送彩信(相当于发送带附件的短信)
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("sms_body", "Hello");
Uri uri = Uri.parse("content://media/external/images/media/23");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/png");
startActivity(intent);
Webブラウザを開き
// 打开百度主页
Uri uri = Uri.parse("https://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
送信する電子メール
// 给[email protected]发邮件
Uri uri = Uri.parse("mailto:[email protected]");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(intent);
// 给[email protected]发邮件发送内容为“Hello”的邮件
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("text/plain");
startActivity(intent);
// 给多人发邮件
Intent intent=new Intent(Intent.ACTION_SEND);
String[] tos = {"[email protected]", "[email protected]"}; // 收件人
String[] ccs = {"[email protected]", "[email protected]"}; // 抄送
String[] bccs = {"[email protected]", "[email protected]"}; // 密送
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("message/rfc822");
startActivity(intent);
地図を表示すると、ルート計画
// 打开Google地图中国北京位置(北纬39.9,东经116.3)
Uri uri = Uri.parse("geo:39.9,116.3");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
// 路径规划:从北京某地(北纬39.9,东经116.3)到上海某地(北纬31.2,东经121.4)
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
マルチメディアを再生します
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
画像を選択
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 2);
写真
// 打开拍照程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
// 取出照片数据
Bundle extras = intent.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");
获取并剪切图片
// 获取并剪切图片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true"); // 开启剪切
intent.putExtra("aspectX", 1); // 剪切的宽高比为1:2
intent.putExtra("aspectY", 2);
intent.putExtra("outputX", 20); // 保存图片的宽和高
intent.putExtra("outputY", 40);
intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/temp"))); // 保存路径
intent.putExtra("outputFormat", "JPEG");// 返回格式
startActivityForResult(intent, 0);
// 剪切特定图片
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp")));
intent.putExtra("outputX", 1); // 剪切的宽高比为1:2
intent.putExtra("outputY", 2);
intent.putExtra("aspectX", 20); // 保存图片的宽和高
intent.putExtra("aspectY", 40);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp"));
startActivityForResult(intent, 0);
電話アプリケーション市場を開きます
// 打开手机应用市场,直接进入该程序的详细页面
Uri uri = Uri.parse("market://details?id=" + packageName);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
セットアップ
String fileName = Environment.getExternalStorageDirectory() + "/myApp.apk";
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)),
"application/vnd.android.package-archive");
startActivity(intent);
アンインストーラ
Uri uri = Uri.parse("package:" + packageName);
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
startActivity(intent);
进入设置界面
// 进入系统设置界面
Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
startActivity(intent);