Open nsaito92 opened 3 years ago
Serviceは起動したが、バッグラウンド制限にかかった時のログ。
12-10 12:48:31.720 30798-30798/com.github.nsaito92.Frock D/AlarmService: onCreate
12-10 12:48:31.724 30798-30798/com.github.nsaito92.Frock D/AlarmService: onStartCommand
12-10 12:48:31.800 4144-4165/? W/ActivityManager: Stopping service due to app idle: u0a254 -103ms com.github.nsaito92.Frock/com.example.naotosaito.clocktest.AlarmService
12-10 12:48:31.803 4144-4165/? W/ActivityManager: Stopping service due to app idle: u0a254 -76ms com.github.nsaito92.Frock/com.example.naotosaito.clocktest.AlarmServiceObserver
12-10 12:48:31.810 30798-30798/com.github.nsaito92.Frock D/AlarmService: startForeground
12-10 12:48:31.838 30798-30798/com.github.nsaito92.Frock D/AlarmService: intent.getIntExtra : COLUMN_INDEX_ID = 5
12-10 12:48:31.839 30798-30798/com.github.nsaito92.Frock D/AlarmService: audioPlay
12-10 12:48:31.839 30798-30798/com.github.nsaito92.Frock D/AlarmService: audioSetup
12-10 12:48:31.857 30798-30798/com.github.nsaito92.Frock D/AlarmService: createFileDescriptor
12-10 12:48:31.858 30798-30798/com.github.nsaito92.Frock D/AlarmService: indexID = 5
12-10 12:48:31.889 30798-30798/com.github.nsaito92.Frock D/AlarmService: entity.getmSoundUri() = content://com.android.externalstorage.documents/document/primary%3AAndroid%2Fmedia%2Fcom.Slack%2FNotifications%2FSlack%20-%20Incoming%20call.mp3
12-10 12:48:31.903 30798-30798/com.github.nsaito92.Frock D/AlarmService: fileDescriptor = Local File
12-10 12:48:31.966 30798-30798/com.github.nsaito92.Frock D/AlarmService: read Audio File
12-10 12:48:31.971 30798-30798/com.github.nsaito92.Frock D/AlarmService: audioPlay mediaPlayer.start
12-10 12:48:32.055 30798-30798/com.github.nsaito92.Frock D/AlarmService: onDestroy
12-10 12:48:32.055 30798-30798/com.github.nsaito92.Frock D/AlarmService: audioStop
12-10 12:48:32.146 30798-30798/com.github.nsaito92.Frock D/AlarmService: stopForeground
対応方法
・Context.startForegroundService()メソッドを使う
元々AlarmManagerで起動していた処理なので、無理?
・JobSchedulerを使う
こちらを試す。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main() {
// ポインタ配列で生成された文字列情報。
char ***p_List = malloc(sizeof(char*) * 5);
for(int i=0; i<5; i++) {
p_List[i] = malloc(sizeof(char*) * 2); //一つのダブルポインタにつき、二つのchar型ポインタ配列を格納出来る様にする。
for(int j=0; j<2; j++) {
p_List[i][j] = malloc(sizeof(char) * 256); // 一つのchar型文字列用配列につき、256バイト格納出来る様にする。
}
}
// 生成したポインタ配列にデータ格納。
p_List[0][0] = "A";
p_List[0][1] = "B";
p_List[1][0] = "A";
p_List[1][1] = "C";
p_List[2][0] = "B";
p_List[2][1] = "C";
p_List[3][0] = "B";
p_List[3][1] = "D";
p_List[4][0] = "C";
p_List[4][1] = "E";
// 1レコードごとのリザルトを格納するポインタ配列。
char **p_ResultList = malloc(sizeof(char*) * 10);
for (int i=0; i<10; i++) {
p_ResultList[i] = malloc(sizeof(char) * 256);
}
// 各レコードのデータをコピーした際のインデックスを格納する。
int *p_checkIndex = malloc(sizeof(int) * 10);
// 依存関係をチェック、CSVにエクスポート
for(int i=0; i<5; i++) { // 右側のカラムをループしてチェックする。
strcpy(p_ResultList[0], p_List[i][0]);
strcpy(p_ResultList[1], p_List[i][1]);
checkColumn = 1;
for(int j=0; j<5; j++) { // 左側のカラムをループしてチェックする。
// printf("p_List[%d][0] = %s , p_List[%d][1] = %s\n ", j, &p_List[j][0][0], i, &p_List[i][1][0]);
if (strcmp(p_List[j][0], p_ResultList[checkColumn]) == 0) {
// ポインタ配列末尾にデータ追加。
strcpy(p_ResultList[checkColumn + 1], p_List[j][1]);
checkColumn++;
p_checkIndex[checkColumn] = j;
j=0;
}
}
// レコードリザルト。
for (int i=0; i <= checkColumn; i++) {
printf("p_ResultList[%d] = %s\n ", i, &p_ResultList[i][0]);
}
// 次のレコードをチェックする前に、他のパターンのチェックが漏れていないかチェックする。
int check = checkColumn - 1;
for(int i=0; i <=check; i++) {
if (strcmp(p_List[j][0], p_ResultList[check]) == 0) {
// ポインタ配列末尾にデータ追加。
strcpy(p_ResultList[check + 1], p_List[j][1]);
check++;
j=0;
}
}
// 次のレコード。
printf("Next\n");
}
// チェック終了。
// ポインタ配列のメモリ全解放。
for(int i=0; i<5; i++) {
free(p_List[i]);
}
free(p_List);
// result格納用ポインタ配列のメモリ解放。
for(int i=0; i<10; i++) {
free(p_ResultList[i]);
}
free(p_ResultList);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int recordFind(char **p_ResultList, char *findValue);
/* 指定された文字列の検索を行う。 */
void find(char ***p_List, char **p_ResultList, char *findValue, int findIndex) {
printf("### find ###\n");
// printf("p_List = %p\n", p_List[0][0]);
// printf("p_List = %s\n", &p_List[0][0][0]);
// printf("p_List = %p\n", p_List[1][0]);
// printf("p_List = %s\n", &p_List[1][0][0]);
// テストデータ挿入。
p_ResultList[0] = "A";
p_ResultList[1] = "P";
p_ResultList[2] = "B";
int cnt = 3;
printf("p_ResultList[0] = %s\n", &p_ResultList[0][0]);
printf("p_ResultList[1] = %s\n", &p_ResultList[1][0]);
printf("p_ResultList[2] = %s\n", &p_ResultList[2][0]);
// 渡された文字が、CSVリストに存在しているか、チェックし、存在していればリザルトCSVに格納。
for(int i=0; i<5; i++) {
printf("p_List[%d][0] = %s\n", i, &p_List[i][0][0]);
// 検索する文字と比較。
if(strcmp(p_List[i][0], findValue) == 0) {
printf("true\n");
// 一致している場合、Toの文字列が、リザルト配列内部に格納済みかチェック。
if(recordFind(p_ResultList, &p_List[i][1][0]) == 0) {
// 条件に一致した文字列は、リザルトに結果を格納。
// 次の検索処理。
printf("insert\n");
}
} else {
printf("false\n");
}
// 見つからなかった場合、結果をCSVに出力。
// 現在の検索位置より、右側の情報を削除。
// 検索インデックスを左へ。(デクリメント)
// 検索インデックスが、一番左にきていた場合
// 処理終了。
// 一番左ではなかった場合
// 検索処理を続行。
}
}
/* 指定された文字列が、リザルト配列に格納済みか否かチエックし、結果を返却する。 */
int recordFind(char **p_ResultList, char *findValue) {
printf("### recordFind ###\n");
printf("findValue = %s\n", &findValue[0]);
int result = 0;
// リザルト関数に格納されているデータの数だけループし、比較を行う。
for(int i=0; i<3; i++) {
if(strcmp(p_ResultList[i], findValue) == 0) {
printf("trascasue\n");
result = 1;
break;
}
}
printf("return = %d\n", result);
return result;
}
int main() {
// ポインタ配列で生成された文字列情報。
char ***p_List = malloc(sizeof(char*) * 5);
// printf("p_List = %p\n", p_List);
for(int i=0; i<5; i++) {
p_List[i] = malloc(sizeof(char*) * 2); //一つのダブルポインタにつき、二つのchar型ポインタ配列を格納出来る様にする。
// printf("p_List[%d] = %p\n", i, p_List[i]);
for(int j=0; j<2; j++) {
p_List[i][j] = malloc(sizeof(char) * 256); // 一つのchar型文字列用配列につき、256バイト格納出来る様にする。
// printf("p_List[%d][%d] = %p\n", i, j, p_List[i][j]);
}
}
// 生成したポインタ配列にデータ格納。
p_List[0][0] = "A";
p_List[0][1] = "B";
p_List[1][0] = "A";
p_List[1][1] = "C";
p_List[2][0] = "B";
p_List[2][1] = "C";
p_List[3][0] = "B";
p_List[3][1] = "D";
p_List[4][0] = "C";
p_List[4][1] = "E";
// 1レコードごとのリザルトを格納するポインタ配列。
char **p_ResultList = malloc(sizeof(char*) * 10);
// printf("p_ResultList = %p\n", p_ResultList);
for (int i=0; i<10; i++) {
p_ResultList[i] = malloc(sizeof(char) * 256);
// printf("p_ResultList[%d] = %p\n", i, p_ResultList[i]);
}
// 検索したい文字列を入力。
printf("### 検索したい文字列を入力してください。 ###\n");
char value[256];
char *findValue;
scanf("%s", value);
// findValue = &(value[0]);
findValue = value;
int findIndex = 0;
// 検索処理を開始する。
find(p_List, p_ResultList, findValue, findIndex);
// チェック終了。
printf("### END ###\n");
// ポインタ配列のメモリ全解放。
for(int i=0; i<5; i++) {
free(p_List[i]);
}
free(p_List);
// result格納用ポインタ配列のメモリ解放。
free(p_ResultList);
return 0;
}
概要
期待値
対応内容
参考情報
備考
*