質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

917閲覧

IntentExtraからパラメーターを代入したい

Dimlos

総合スコア2

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2022/03/02 14:52

Android Studioを使い始めて間もない初心者です、スマートフォンのボリュームを設定するアプリを作っているのですが、音量設定のパラメーターをアプリ起動時のIntentExtraから代入したいのですがうまくいきません。

intent.getIntExtraで数値が代入できるかと思っていたのですが、実際に起動するとデフォルト値でしか動作しません。IntentExtraからパラメーターを代入するにはどうしたら良いのでしょうか?

MainActivity.kt

1package com.example.oppo_volume 2 3import android.app.Activity 4import android.content.Context 5import android.media.AudioManager 6import android.os.Bundle 7import androidx.appcompat.app.AppCompatActivity 8 9 10class Main : AppCompatActivity() { 11 override fun onCreate(savedInstanceState: Bundle?) { 12 super.onCreate(savedInstanceState) 13 setContentView(R.layout.activity_main) 14 15 } 16} 17internal class MainActivity : Activity() { 18 override fun onCreate(savedInstanceState: Bundle?) { 19 20 startActivity(intent) 21 22 val intent = getIntent(); 23 val oppovolume = intent.getIntExtra("VOLUME",0); 24 25 val manager: AudioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager 26 manager.setStreamVolume(AudioManager.STREAM_MUSIC, oppovolume, 0) 27 this.finish(); 28 } 29}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/03/02 15:46

そのアプリを起動する側がパラメーターを設定してるのでしょうか?
Dimlos

2022/03/02 17:08

アクション android.intent.action.MAIN パッケージ名 com.example.oppo_volume クラス名 com.example.oppo_volume.MainActivity エクストラ キー VOLUME 値 8 のようにパラメーター付きで起動させています。
guest

回答1

0

ベストアンサー

intent内のデータを取り出したい場合は、まずはintentに詰め込むデータを作る必要があります。
試しにMainActivityとSecondActivityというクラスを作って見ました。
流れとしてはMainActivityからintentを作成しその中で値を詰めます。その後SecondActivityで値を受け取ります。

Intent自身は2つのActivity間を繋ぐ(具体的にはメッセージングオブジェクトでプロセスを繋ぐ)もので、起動時に渡されたIntent内に値が入っていればそれを受け取ることができるものです。

なので通常起動時にIntentを利用せず、そもそも最初からVOLUMEの値をファイル内で入れてしまうという手もありますし、どうしてもIntentが必要であれば別のActivityから受け渡すという方法が適切かと思います。
余談ですが、adbコマンドを利用すると下記のようにコマンドのオプションで渡すことも可能です。(使い方は下記URLがよさそうです)
https://qiita.com/kikuchy/items/39d1901c7007e37bfe02

MainActivity.kt

1import android.content.Intent 2import android.os.Bundle 3import androidx.appcompat.app.AppCompatActivity 4 5class MainActivity : AppCompatActivity() { 6 override fun onCreate(savedInstanceState: Bundle?) { 7 super.onCreate(savedInstanceState) 8 setContentView(R.layout.activity_main) 9 10 val intent = Intent(this, SecondActivity::class.java) 11 intent.putExtra("VOLUME", 10) 12 startActivity(intent) 13 } 14}

SecondActivity.kt

1import android.content.Context 2import android.media.AudioManager 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.util.Log 6 7class SecondActivity : AppCompatActivity() { 8 override fun onCreate(savedInstanceState: Bundle?) { 9 super.onCreate(savedInstanceState) 10 setContentView(R.layout.activity_second) 11 12 val intent = intent; 13 val oppovolume = intent.getIntExtra("VOLUME",0); 14 15 Log.d("oppovolume: ", oppovolume.toString()) 16 17 val manager: AudioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager 18 manager.setStreamVolume(AudioManager.STREAM_MUSIC, oppovolume, 0) 19 } 20}

投稿2022/03/02 16:33

daichi_mizuno

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Dimlos

2022/03/02 17:17

回答ありがとうございます、このアプリはフォアグラウンドでなければ音量変更ができないアプリの補助用に開発しており、透明で起動したのがわからない形で消音と最大音量にするアプリを作りました。 テストで公開した所、任意のパラメーターでボリュームを変更したいという要望があり、最初から設定値を決め打ちするのではなく、IntentExtraのパラメーターを変更して起動する事によりユーザーが任意のボリュームに変更できるのではないかと考えました。 素人考えで恐縮ですがIntentExtraのパラメーターも別アプリからIntentを通じて値を受け渡すのと変わりないような気がするのですが無理なのでしょうか?
daichi_mizuno

2022/03/02 17:46

イマイチまだこのアプリの用途を理解できていませんが、、、もしかしてハードウェアに設定されている音量設定値を取得したいということなのでしょうか。 Intentはメッセージングオブジェクトを送受信するためのものなので、送信者がいて受信者がいるものです。 別アプリがVOLUMEというKeyでDimlosさんのアプリに送信していれば受信できますが、送信していなければ受け取ることはできません。 もし送信しているのに受信できていないということであれば、実装が間違っている可能性が高いので、下記公式ページを見ると良いかと思います! https://developer.android.com/training/sharing?hl=ja
Dimlos

2022/03/02 22:56

ハードウェアのボリュームを0~16の数値で任意に指定し、変更するアプリを作りたいのですが説明が下手ですいません。通常なら設定画面を出してユーザー入力で設定値を得れば良いのでしょうが、透明なviewにしてアプリが起動している事がわからない状態でフォアグラウンドで音量設定だけを行いたいのです。 ソースがあるのに気が付かずまだ良くみれていないのですが、こちらのアプリは起動時にBroadcastIntentでtunnelというIntentExtraを処理できています。アプリ起動時にIntentExtraのtunnelに値を入れる事でその値をアプリ内部で使えているので私も同じ事をしたいのです、今時間が無くて調べ切れていないのですがBroadcastReceiverが必要なようですね。 https://github.com/blurayne/TaskerWgTunner
Dimlos

2022/03/03 13:19

すいません、ShortcutMakerというアプリでExtraを指定したのですがちゃんとintentが送信できていませんでした。正にご指摘の通りで使用を想定していたMacroDroidからintentを送信した所、教えて頂いた構文でExtraのパラメーターを読み取り、思っていた通りのアプリができました。 知識が足りず、無礼な返答になってしまいました事をお詫びいたします。
daichi_mizuno

2022/03/03 13:37

MacroDroidを使ってたんですね! お役に立てて光栄です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問