2024年2月1日木曜日

PayPalからの「ご対応が必要です: 推定支出をご提出ください」の申告方法

 PayPalからの「ご対応が必要です: 推定支出をご提出ください」というメールが届いた。

(前略)行っていただく必要のある手順は以下のとおりです。

  • まだPayPalアカウントに銀行口座を登録されていない場合はご登録ください。
  • ◯月のPayPalでの使用予定金額*をお知らせください

はいはい、申告すればいいのねって感じだったが、肝心のその申告方法がわからなかった。

問い合わせた結果、「PayPalでの」という部分のリンクをから進むのが正解なのだが、そのリンクから申告ページが表示されるまでにはメールが届いてから3営業日ほど必要とのことだった。

というわけで正解は「メールが届いてから3営業日ほど待って、[PayPalでの] の部分のリンクをクリックする」でした。同じ状況で困ってる人はとりあえず待ちましょう。

2021年3月20日土曜日

Android PieでImageViewやbackgroundに設定した画像の色が変わる

 Android PieでImageViewやbackgroundに設定した画像の色が変わる現象に遭遇した。
(静的に色が変わったり、短い期間に動的に繰り返し変わってチカチカ点滅するような感じになる)

今のところAndroid Pie ( Android 9 )のSO-05KとEssential Phone PH-1で発生。またユーザーさんのレビューとしても上記チカチカが挙がっていて、そちらのOSもAndroid Pie。

モバイルSuicaやウェザーニュースのアプリでも明らかに開発側が意図していないだろう変色が起きていることから、広く発生している問題なのだろうと思う。

というわけで自分のアプリで少し現象を追ってみると大変不思議な挙動で、まず初回インストールでは発生しない。アップデートインストールで発生する。

発生した場合色が変わるタイミングが不明(起動直後に変わったり変わらなかったり)
状況的にはAdmobの特定のバナー広告を読み込むと発生しているように見える。(広告をロードしない場合は発生しなかったが、たまたま顕在化しなかっただけかもしれないので確定的ではない)
Admobのバージョンを18.6.0まで以降19.8.0までいくつかのバージョンで試したが、いずれもNG。

回避方法としてはハードウェアアクセセラレーションをオフにするとこの現象は発生しなくなる。
android:hardwareAccelerated="false"
でもこれだとパフォーマンスが下がってアニメーションがカクカクになってしまうので、
backgroundをvector drawableにする( vector drawableなら発生しない )などしてなるべく影響範囲を抑えたうえ、
どうしてもラスター画像が必要なところに対してだけ
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P) {
imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null );
}
としてハードウェアアクセラレーションを無効にするとよい。

おそらく何らかの条件が重なった時にだけ起こる問題のようで、StackOverflowでも全然見つからない。
こんなので困ってる人はそうそういないと思うけど、もしいたら参考にしてください。

2021年1月2日土曜日

Macで音が変な時(音飛び、プチプチ音、クリック音がする)はiOSシミュレーターが原因かも

Macで再生音がおかしくなる問題が発生して困った。
音飛びというよりはプチプチ音が断続的に入るイメージ。
非常に耳障りが悪い。

直接的な原因としてはバッファアンダーランな感じ。
(断続的にサンプル値が0になるとこういう音になる)

YoutubeでもZoomでも発生。
スピーカーでもイヤホンでも同じ。

で原因を探していると以下を見つけた
 https://developer.apple.com/forums/thread/132423

端的に言えばiOSシミュレーターを起動していると発生するよ、というもの。
確かにiOSシミュレーターを落としたら直った。

CatalinaでもBig Surでも発生する模様。

XCode12から発生し始めたらしい。直してほしいなあ。

2020年9月14日月曜日

フォルダを標準ファイルアプリで開くIntent

Android 10で導入されたScoped Storageによって、ストレージに読み書きしていたアプリの開発者は大変な目にあっていますが、私も例に漏れず対応に追われています。

中でも困っているのが、自作のアプリが部分的にファイルエクスプローラー機能を持っている点。

MANAGE_EXTERNAL_STORAGE を使うという最終手段は残っていますが、恐らくGoogle Playのポリシー的に許可されないだろうという気持ちもあり、それ以外の道を探しています。

自前のエクスプローラー機能ではフォルダの作成やリネーム、移動などの基本的なファイル操作ができるのですが、requestLegacyExternalStorageが使えなくなるだろうAndroid 12では今のままでは使えなくなります。

大体手段として全てSAFでやるという方法もありますが、ちょっと対応とテストが大変なのでやめることにしました。

ファイルを開きたい場合ACTION_GET_CONTENTを使うとファイルピッカーを起動できますが、この場合フォルダの作成などファイル編集系メニューが表示されません。

ファイルピッカーとしてではなく、単に¥フォルダを指定してファイルアプリを起動するには以下のようなコードを呼び出します。

※ uri%A3はパスセパレーターです。

Intent intent = new Intent(Intent.ACTION_VIEW);

Uri uri = Uri.parse("content://com.android.externalstorage.documents/document/primary%3APictures");
intent.setData(uri);
if (intent.resolveActivityInfo(getPackageManager(), 0) != null)
{
startActivity(intent);
}else{
Toast.makeText( App.getContext(), "Failed to open file explorer", Toast.LENGTH_SHORT ).show();
}

2019年12月18日水曜日

iOSアプリのアプリ内課金の審査で"デベロッパの対応が必要"と言われる

かなりトラブったのでメモ。

iOSアプリのアプリ内課金を非消耗型からサブスクリプション型に変えた
非消耗型の時には特に苦労した覚えがないのだが、
今回はApp内課金を審査したところ"デベロッパの対応が必要"という形で差し戻された

内容を読むと「君のアプリがちゃんとサブスクリプションに対応できてるか確認するからバイナリをアップロードしてね」というもの。

これが不親切で具体的にどういう手順でバイナリをアップロードすればいいのかが全く書かれていない。そして、App Store Connect内を隅から隅まで探してもそれに対応するようなアップロード場所がない。

調べたところフォーラムで対応策が書かれていた(codeulikeさんの投稿)
https://forums.developer.apple.com/thread/35757

以下日本語版手順
1.App内課金から、差し戻されたサブスクリションを削除して、作り直し。この時「審査へ提出」してはならない。
※製品IDを変えないといけなくなるが、この状態に陥っている場合これは避けられない(個別に問い合わせればなんとかしてくれるかもしれない)

2.新しい製品IDで動作確認。

3.普段通りアプリのリリース作業をする(Xcodeからアップロード->App Store Connectで編集)。この時、App Store Connect上で情報を入力する時にGame Centerの項目の上に「App内課金」という項目が付加されるので、ここで1で作り直したApp内課金を追加する。1で「審査へ提出」してしまった場合はこの項目が表示されないのでもう一度やりなおし。


2019年7月12日金曜日

Gitで SSL certificate problem: Invalid certificate chainと表示されクローンできない

Gitで SSL certificate problem: Invalid certificate chainと表示されクローンできない

こんな時Web上ではSSLの検証をoffにすれば解決するよという情報が目につくが、
自分の場合は端末の時刻が年単位でずれているせいだった。

時刻を直すことで無事cloneできるようになった。

2019年5月6日月曜日

Androidのjava.net.URI.relativizeの挙動がおかしい

URI base = new URI("http://hostname/root");
URI uri  = new URI("http://hostname/root/yyy/zzz.html");
URI rel = base.relativize(uri);

上記コードのrelは
yyy/zzz.html
となるのが正しい挙動(Javaではそうなる)のはずだが、
Android 8ではroot/yyy/zzz.html が返ってくる。

調べてみると、Androidのrerativizeのソースにこの挙動が明記されていた

// Android-changed: The original OpenJdk implementation would append a trailing slash
// to paths like "/a/b" before relativizing them. This would relativize /a/b/c to
// "/c" against "/a/b" the android implementation did not do this. It would assume that
// "b" wasn't a directory and relativize the path to "/b/c". The spec is pretty vague
// about this but this change is being made because we have several tests that expect
// this behaviour.

解決策はない? 自分はhttp://www.devx.com/tips/Tip/13737 を使うことにした

2019年3月24日日曜日

ActionModeの下線の色の変え方(actionModeSplitBackgroundが効かない)

どうやらAppCompatではActionModeでの下線がactionModeSplitBackgroundで変えられないもよう。
対策は、なんてことはない、actionModeBackgroundで下線がつくようにBackgroundを設定するだけ。

@drawable/am_background


    
    
        
            
        
    
    
    
        
            
        
    

2018年8月14日火曜日

Google Driveのバックアップと同期をインストール後、NASにアクセスできなくなった

Google Driveの「バックアップと同期」をインストールしてバックアップするフォルダとしてNAS上のフォルダーを指定して再起動したところ、NASにアクセスできなくなった。

\\192.168.1.x\
ではアクセスできたが、
\\<ネットワークドライブ名>\
ではアクセスできず、以下のエラーメッセージが出た。

「このネットワーク リソースを使用するアクセス許可がない可能性があります。アクセス許可があるかどうかこのサーバーの管理者に問い合わせてください。
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。」

色々試した結果、タスクマネージャーからgoogledrivesync.exeを強制終了したところNASにアクセスできるようになった。
試していないが資格情報を保存してしまえば次回の再起動以降エラーが出なくなるような気がする。

2018年6月20日水曜日

ファイルを共有しようとするとFileUriExposedExceptionが出る場合

Target SDKがN以降の場合、ファイルパスを指定する従来の共有をしようとするとFileUriExposedExceptionが出る

FileProviderを使うのが楽で、以下はFileProviderを使ってACTION_SENDで共有する例

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>
 
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path=".">
    <external-files-path name="external_files_path" path=".">
    <root-path name="external_files" path="/storage/">
</root-path></external-files-path></external-path></paths>
File file = new File(filesToSend.get(0));
Uri contentUri = FileProvider.getUriForFile(App.getContext(), App.getContext().getPackageName() + ".provider", file );
String mimeType = "audio/*";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType( "application/octet-stream");
intent.putExtra(Intent.EXTRA_STREAM, contentUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
App.getContext().startActivity(intent);

2018年6月18日月曜日

adb install で INSTALL_PARSE_FAILED_NO_CERTIFICATESが出る場合の対処法

adb install で INSTALL_PARSE_FAILED_NO_CERTIFICATESが出る場合、
Android StudioでGenerate Signed APKを実行するときに、最後のページのSignature VersionsでV1とV2両方にチェックを入れましょう

2018年3月13日火曜日

ファイルコピーの[NSData dataWithContentsOfURL:]で落ちる

ShareExtensionでファイルをコピーするサンプルの多くが

[NSData dataWithContentsOfURL:];

でコピーしていたので、それにのっとってコピーしていたのだが、巨大なファイルだとこれではメモリ不足で落ちる。

代わりに
 

NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];
[filemgr copyItemAtPath:[newURL path] toPath:dstPath error: &error];

とすると良い

2016年7月6日水曜日

Windows 10 でExplorerが頻繁に固まる

Windows 10でファイルのコピーをすると高確率でエクスプローラーが無反応になって困っていました。

自分の場合はクイックアクセスにアクセスできなくなっていたネットワークフォルダーが登録されていたのが原因でした。

恐らくネットワークフォルダを探しにいってタイムアウトになるまで操作を受け付けなくなっていたんだと思います。
同じ現象が起きている方はお試しあれ。


2015年12月17日木曜日

ffmpeg 2.8.3がAndroidで使えない人向けの対処法

どうもMP3のデコードの挙動がおかしかったので、ffmpegを2.8.3にバージョンアップしてみた。
そしたら出力される共有ライブラリの拡張子が.soじゃない(バージョンが後ろに付与される)という事態に・・・・。

えいやでそのままビルドしようとすると拡張子が違うことで弾かれてしまった。
LOCAL_SRC_FILES should point to a file ending with ".so"
てな具合に。
互いに参照しているので、ファイル名を変えるだけでもだめ。

分かった対処法は、configureの以下を
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

以下のように変えればOK
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

これで拡張子がsoになる。

2015年10月17日土曜日

Google Mapが見られない時の対処法

Google Mapが特定のブラウザで見られない時、
以下の文字列をURLの末尾につけると見られるようになる場合があります。
?force=lite

例えば

https://www.google.co.jp/maps/@35.7082437,139.7713727,15.71z
を見たい場合
https://www.google.co.jp/maps/@35.7082437,139.7713727,15.71z?force=lite

といった具合です。
ただし欠点として、いくつかの機能が使えなくなります。
それでも見られないよりましでしょう。

2015年6月24日水曜日

Exportする時のconversion to dalvik format failed with error 1の対策

よく見つかる方法じゃ直らなくて、結局
proguard-android-optimize.txtの
-optimizationpasses 5
を
-optimizationpasses 1
に変えてみたら表題のエラーが出なくなった。

なぜなのか。

2015年2月22日日曜日

Android Asset Studioでアイコン生成結果が灰色になる

Android Asset Studioでアイコン生成すると灰色になってしまう問題に悩まれた。

この現象はissueとして報告に挙がっていて、入力画像が悪いとのこと。
背景は白画素じゃなくて、透過画素じゃないといけないとのこと。

2015年1月3日土曜日

Internet Archiveでの文字化け対策

Internet Archiveでの文字化けする場合、基本は他のエンコードを試して終了ですが、
それでうまくいかない場合があります。

どうやら内部処理で異なるエンコードに強制的に変換されて出力されている場合があるようです。

このような場合は変換なしで出力する方法を試してみて下さい。
方法は数字の羅列の末尾に   id_   を付けるだけです。

例えば以下のようなURLの場合
http://web.archive.org/web/20020930123525/http://www.wikipedia.org/

このように変えます
http://web.archive.org/web/20020930123525id_/http://www.wikipedia.org/

お試しあれ。

2014年11月29日土曜日

画面の明るさを変更するショートカットキーを作る(Windows)

nircmdを使った画面の明るさを変更するショートカットキーの設定方法の紹介です。

この方法を使えば、任意のキーの組み合わせで、一段階明るく、または暗くすることができます。
また、一回でどれほど明るく/暗くするかも決められます。

▼手順
まずnircmdをDLします。
http://www.nirsoft.net/utils/nircmd.html
( 一番下の< Download NirCmd > をクリック)

そして、解凍したのち、コマンドプロンプトを開いてnircmdを展開したフォルダへいきます。
そして、以下のようなコマンドを入力します。
> nircmd.exe cmdshortcutkey "~$folder.desktop$" "Decrease Brightness" "Ctrl+Alt+F9" changebrightness -1
> nircmd.exe nircmd.exe cmdshortcutkey "~$folder.desktop$" "Increase Brightness" "Ctrl+Alt+F10" changebrightness 1

Ctrl+Alt+F9/F10の部分には好きなショートカットを入力してください。
最後の1を5や10などとすると一度の明るさの変更量が変わります。

以上です。

2014年11月6日木曜日

音声認識エンジン Julius の読み方

知人に「音声認識のJuliusってユリウスって読むんだよ(ドヤァ 」と言われて気になったので調べてみました。
結論としては、音声認識エンジン Julius の読み方は「ジュリアス」が妥当なように思います。

以下は開発元サイトからの引用です。
http://julius.sourceforge.jp/juliusbook/ja/pr01.html
> 日本語での発音は「ジュリアス」「ジュリウス」「ユリアス」「ユリウス」など諸説あるが,開発チーム内では「ジュリアス」が用いられている

 開発チームで「諸説ある」と表現するのがまた面白いなと思います。
 文脈からすると、起源が古すぎて本来どのように読んでいたのか正確なところはわからない、ということでしょう。
いずれにせよ、今の開発チーム内でジュリアスと読んでいるなら、 音声認識エンジンJuliusの読み方は「ジュリアス」と考えるのが妥当かと。