インテントを使用するいくつかの機能


はじめに


インテントオブジェクトは、Androidアプリケーションの異なる部分間、またはシステムの異なるアプリケーション間の通信に使用できます。 インテントメカニズムの威力は、システムにインストールされているアプリケーションにアクセスするために使用できることです。 これにより、一部のコンポーネントを再利用し、開発時間を大幅に短縮できます。

この記事では、Intentクラスを使用してシステムアプリケーションにアクセスする可能性をいくつか示します。

Intentaでできること:

1.電話

Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "123456789")); startActivity(dialIntent); 

また、電話をかける許可を追加する必要があります。
 <uses-permission android:name="android.permission.CALL_PHONE" /> 

または緊急通報の許可:
 <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> 

最初のパラメーターにACTION_DIALとしてインテントを指定することにより、呼び出しを行うこともできます。 この場合、指定された番号の電話帳が開きますが、通話自体は自動的に行われません。 このパラメーターには、マニフェストにアクセス許可は必要ありません。

2. SMSを送信する

 Intent smsIntent = new Intent(Intent.ACTION_VIEW); smsIntent.setType("vnd.android-dir/mms-sms"); smsIntent.putExtra("sms_body", "Some SMS text"); startActivity(smsIntent); 

なぜなら このコードはSMSを直接送信するのではなく、SMSを送信するための標準アクティビティを起動するため、アクセス許可を指定する必要はありません。

3.電話帳から連絡先を取得する

 Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.ContactsContract.Contacts.CONTENT_URI); startActivityForResult(pickIntent, PICK_RESULT); 

このコードは、標準の連絡先アプリケーションを開きます。 startActivityForResultメソッドを使用すると、オーバーライドされたonActivityResultメソッドのIntentデータパラメーターから選択した連絡先のURIを取得できます。

上記のコードは、メールを含む連絡先アプリケーションのすべてのユーザーの連絡先を一度に表示します。 電話帳から連絡先のみを選択する必要がある場合は、次のコードを使用できます。
 Intent pickIntent = new Intent(Intent.ACTION_GET_CONTENT); pickIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); startActivityForResult(pickIntent, PICK_RESULT); 

連絡先リストを読むには、マニフェストにアクセス許可も追加する必要があります。
 <uses-permission android:name="android.permission.READ_CONTACTS" /> 

4.ブラウザーでリンクを開きます

 Intent browseIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); startActivity(browseIntent); 

このコードは、インストールされているブラウザーのいずれかでパラメーターに渡されたリンクを開きます。 この場合、ユーザーは表示するブラウザを選択できます。 リンクがYouTubeにつながる場合は、標準のYouTubeアプリケーションですぐにビデオを開くことができます。
このインテントを使用すると、アプリケーションへのリンクで標準のAndroidマーケットクライアントを開くこともできます。 これを行うには、form market:// search?Q =検索クエリuriパラメータに渡す必要があります。
インターネットの許可は必要ありません。 ネットワークは直接使用されるのではなく、ブラウザアプリケーションを介して使用されます。

5.コンテンツを共有する/手紙を書く

 Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Content subject"); shareIntent.putExtra(Intent.EXTRA_TEXT, "Content text"); startActivity(Intent.createChooser(shareIntent, "Sharing something.")); 

共有するコンテンツの目的とテーマを設定できます。 Intent.createChooser()メソッドは、適切なアプリケーションを選択するためのダイアログを作成します。
メディアコンテンツ(画像/動画)を共有する必要がある場合は、 setTypeメソッドで適切なコンテンツタイプを指定する必要があります。たとえば、 mailIntent.setType( "image / png"); 、コンテンツ自体を追加のインテントに追加します。
 shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri); 

このインテントを使用して、特定のアドレスにメールを送信することもできます。
 shareIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { mail }); 

6.特定の座標またはリクエストでマップを開きます

 String uri = "geo:"+ latitude + "," + longitude; Intent mapIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(mapIntent); 

同時に、他のパラメーターを指定してUriを変更できます。

7.カメラから写真を撮る

 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_RESULT); 

このコードは、標準カメラアプリケーションを起動します。 カメラから受信した画像は、 onActivityResultメソッドで処理できます。
 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_RESULT) { Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ImageView ivCamera = (ImageView) findViewById(R.id.iv_camera); ivCamera.setImageBitmap(thumbnail); } } 

カメラから取得した画像は、インテントにパラメーターを追加することにより、特定のディレクトリに保存できます。
 File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(filePath))); 

このインテントを使用するために、許可android.permission.CAMERAは必要ありません。 カメラは直接使用されませんが、組み込みのカメラアプリケーションが呼び出されるだけです。 ただし、AndroidManifestに次の行を追加することをお勧めします。
 <uses-feature android:name="android.hardware.camera"></uses-feature> 

したがって、カメラが内蔵されていないデバイスを使用している人(明らかにこれも発生します)は、市場にあるアプリケーションを見ることができません。

8. Skype経由で連絡先に電話をかける

Skype Intent経由で電話をかけるには、アクティビティの特定の名前と、それが連絡するパッケージを指定する必要があります。 これにより、コードが少し複雑になります。 skypeパッケージの2つの異なるバージョンでは、名前が異なります。 システムにインストールされているSkypeクライアントのバージョンと、インストールされているかどうかを確認する必要があります。 次の方法を使用して確認できます。
 public static boolean isIntentAvailable(Context context, Intent intent) { final PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> list = packageManager.queryIntentActivities( intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } 

このメソッドは、特定の意図に応答できるアプリケーションをシステムで確認します。 この方法を使用すると、Skypeの呼び出しコードは次のようになります。
 private static final String SKYPE_PATH_GENERAL = "com.skype.raider"; private static final String SKYPE_PATH_OLD = "com.skype.raider.contactsync.ContactSkypeOutCallStartActivity"; private static final String SKYPE_PATH_NEW = "com.skype.raider.Main"; Intent skypeIntent = new Intent().setAction("android.intent.action.CALL_PRIVILEGED"); skypeIntent.setData(Uri.parse("tel:" + skype)); if (isIntentAvailable(context, skypeIntent.setClassName(SKYPE_PATH_GENERAL, SKYPE_PATH_NEW))) { context.startActivity(skypeIntent); } else if (isIntentAvailable(context, skypeIntent.setClassName(SKYPE_PATH_GENERAL, SKYPE_PATH_OLD))) { context.startActivity(skypeIntent); } else { Toast.makeText(context, " Skype  .", Toast.LENGTH_LONG).show(); } 

システム上のアプリケーションを確認する簡単な方法は、 ActivityNotFoundExceptionをキャッチすることです。これは、 startActivityメソッドでクラッシュします。 ただし、これは問題への対応のみを許可し、防止はできません。 たとえば、 上記isIntentAvailableメソッドを使用して、適切なコントロールを時間通りに非アクティブにするか、ユーザーをAndroidマーケットにリダイレクトして対応するアプリケーションをインストールできます。

9. Speech to Textを音声認識に使用する

 Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); speechIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak please"); startActivityForResult(speechIntent, RESULT_SPEECH_TO_TEXT); 

このコードは、音声認識アプリケーションを起動します。 何かを言うと、システムは音声を処理し、結果をonActivityResultメソッドに返します。
 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RESULT_SPEECH_TO_TEXT && resultCode == RESULT_OK) { ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); TextView tvSpeech = (TextView) findViewById(R.id.tv_speech); tvSpeech.setText(matches.get(0)); } } 

おわりに


インテントメカニズムは、開発者に大きな機会を提供します。 この記事では、意図の助けを借りて簡単に実装できるアクションの例を示したいと思いました。 彼女が開発の時間を節約してくれることを願っています。
おそらく、インテントを使用する他の興味深いオプションがあります。 コメントで共有することをお勧めします。

Source: https://habr.com/ru/post/J131041/


All Articles