質問編集履歴
1
Serviceのソースコード、試したこと、補足を追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,18 +1,12 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
-
|
3
2
|
初めて質問させていただきます。
|
4
3
|
Androidでアプリやブラウザ上に仮想ボタンのようなものを表示させ続けるアプリを作ろうと考えております。
|
5
|
-
|
6
4
|
現在、アプリのトップ画面を形成するActivity内にServiceを開始する(仮想ボタンを表示させる)ボタンとSpinnerを設定しており、Spinnerで選択された値によって仮想ボタンが表示される初期位置を決められるようにしたいと考えております。
|
7
5
|
そこで、Activity内のSpinnerで選択された値をService側へ送ればよいのではないかと考えており、intentを使ってActivityからServiceへ値を送りたいと考えております。しかし、Service側で値が参照できないのか、うまく値を送ることができません。
|
8
|
-
|
9
6
|
ActivityからServiceへ値を送るにはどうすればよいのでしょうか?よくわかっていない部分も多く、コードも見づらいとは思いますがどなたかご助力いただければ幸いです。
|
10
|
-
### 発生している問題・エラーメッセージ
|
11
|
-
|
12
7
|
```
|
13
8
|
Compilation failed; see the compiler error output for details.
|
14
9
|
```
|
15
|
-
|
16
10
|
### 該当のソースコード
|
17
11
|
|
18
12
|
```Java
|
@@ -150,12 +144,87 @@
|
|
150
144
|
```Java
|
151
145
|
【TestService.java】
|
152
146
|
|
147
|
+
import android.app.Notification;
|
148
|
+
import android.app.NotificationChannel;
|
149
|
+
import android.app.NotificationManager;
|
150
|
+
import android.app.PendingIntent;
|
151
|
+
import android.app.Service;
|
152
|
+
import android.content.Context;
|
153
|
+
import android.content.Intent;
|
154
|
+
import android.graphics.PixelFormat;
|
155
|
+
import android.net.Uri;
|
156
|
+
import android.os.IBinder;
|
157
|
+
import android.util.Log;
|
158
|
+
import android.view.Gravity;
|
159
|
+
import android.view.LayoutInflater;
|
160
|
+
import android.view.MotionEvent;
|
161
|
+
import android.view.View;
|
162
|
+
import android.view.ViewGroup;
|
163
|
+
import android.view.WindowManager;
|
164
|
+
import android.widget.ImageButton;
|
165
|
+
import android.widget.TableLayout;
|
153
166
|
|
167
|
+
public class TestService extends Service {
|
168
|
+
|
169
|
+
//画面に全面表示させるビュー
|
170
|
+
private View view;
|
171
|
+
private WindowManager windowManager;
|
172
|
+
private int dpScale;
|
173
|
+
private ImageButton button1, button2, button3, button4, button5, button6;
|
174
|
+
private TableLayout tableLayout;
|
175
|
+
|
176
|
+
@Override
|
177
|
+
public void onCreate() {
|
178
|
+
super.onCreate();
|
179
|
+
|
180
|
+
// dipを取得
|
181
|
+
dpScale = (int)getResources().getDisplayMetrics().density;
|
182
|
+
|
183
|
+
}
|
184
|
+
|
185
|
+
@Override
|
186
|
+
public int onStartCommand(Intent intent, int flags, int startId) { // startServiceでサービスが開始要求を受けた時のコールバック。
|
187
|
+
// startForegroundService() -----
|
188
|
+
|
189
|
+
Context context = getApplicationContext();
|
190
|
+
String channelId = "default";
|
191
|
+
String title = context.getString(R.string.app_name);
|
192
|
+
|
193
|
+
~(略)~
|
194
|
+
Intent intent = getIntent();
|
195
|
+
String item = intent.getStringExtra("①,②,③,④");
|
196
|
+
params.gravity = Gravity.TOP | Gravity.END;
|
197
|
+
if(item = intent.getStringExtra("①")) {
|
198
|
+
// 左上(①)に配置
|
199
|
+
params.x = 200 * dpScale; // 200dp
|
200
|
+
params.y = 80 * dpScale; // 80dp
|
201
|
+
}else if(item = intent.getStringExtra("②")) {
|
202
|
+
// 右上(②)に配置
|
203
|
+
params.x = 20 * dpScale; // 20dp
|
204
|
+
params.y = 80 * dpScale; // 80dp
|
205
|
+
}else if(item = intent.getStringExtra("③")) {
|
206
|
+
// 左下(③)に配置
|
207
|
+
params.x = 200 * dpScale; // 200dp
|
208
|
+
params.y = 300 * dpScale; //
|
209
|
+
}else {
|
210
|
+
// 右下(④)に配置
|
211
|
+
params.x = 20 * dpScale; // 20dp
|
212
|
+
params.y = 300 * dpScale; // 300dp
|
213
|
+
}
|
214
|
+
~(略)~
|
154
215
|
```
|
155
216
|
### 試したこと
|
156
217
|
|
218
|
+
```
|
219
|
+
Intent intent = getIntent();
|
220
|
+
~(略)~
|
157
|
-
|
221
|
+
// 右下(④)に配置
|
158
|
-
|
222
|
+
params.x = 20 * dpScale; // 20dp
|
223
|
+
params.y = 300 * dpScale; // 300dp
|
224
|
+
}
|
225
|
+
```
|
226
|
+
の部分にエラーが出ております。if文(あるいはそれ以外の条件文)を使うこと自体がおかしいのか、ServiceではgetIntentを用いること自体ができないのか、様々なサイトを調べましたが、解決方法が見つかりませんでした。
|
159
227
|
### 補足情報(FW/ツールのバージョンなど)
|
160
228
|
|
229
|
+
言語:Java
|
161
|
-
|
230
|
+
開発環境:Android Studio3.1.3
|