投稿

ラベル(Android Studio)が付いた投稿を表示しています

Android 7 (Nougat)以降で、RINGER_MODE_VIBRATE(マナーモード)へ切り替えようとするとクラッシュ

久々に Google Play へ登録したアプリを更新しようとしたら、targetSdkVersion は 26 以上、2019/11/1以降は 28 以上じゃないとアップできねーとか表示されて、ターゲットをあげた途端に色々動作しなくなったり強制終了するようになったのメモ Android 7 (Nougat)以降で、RINGER_MODE_VIBRATE(マナーモード)へ切り替えようとすると値が AudioManager.RINGER_MODE_VIBRATE (値=1) の時のみエラーが発生 AudioManager AudioMan = (AudioManager) getSystemService(Context.AUDIO_SERVICE); AudioMan.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); // ←バイブレートはNG // AudioMan.setRingerMode(AudioManager.RINGER_MODE_SILENT); // ←サイレントはOK どうも、バイブレートへ切り替えるのに権限と確認が 必要になったらしい マニフェストへ < uses-permission android :name ="android.permission.ACCESS_NOTIFICATION_POLICY" /> を加えて モード変更の手前で、権限が得られていない場合に設定画面を表示させる記述を入れる // Android7 以降 マナーモードへの権限設定(初回は設定画面が開く) NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !notificationManager.isNotificationPolicyAccessGranted()) { Intent setupIntent = new Intent(android.prov...

Android 8 (Oreo) 以降で、透過Activityがクラッシュ

久々に Google Play へ登録したアプリを更新しようとしたら、targetSdkVersion は 26 以上、2019/11/1以降は 28 以上じゃないとアップできねーとか表示されて、ターゲットをあげた途端に色々動作しなくなったり強制終了するようになったのメモ SdkVersionを上げたら、通知から読んでいた 透過Activityがクラッシュするようになった protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ←ここで既に落ちてる } どこから呼び出しても落ちるため、調べていたら 透過Activityで画面の向きを固定設定していると Oreoでクラッシュ するという貴重な情報にたどり着く <activity android:name=".HogeActivity" android:screenorientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN"> </action></intent-filter> </activity> のように     android:screenOrientation="portrait" や     android:screenOrientation="landscape" と共に     android:theme="@android:style/Theme.NoDisplay" や     android:theme="@android:style/Theme.Translucent.NoTitleBar" ...

Android 8 (Oreo) 以降の通知生成

久々に Google Play へ登録したアプリを更新しようとしたら、targetSdkVersion は 26 以上、2019/11/1以降は 28 以上じゃないとアップできねーとか表示されて、ターゲットをあげた途端に色々動作しなくなったり強制終了するようになったのメモ Oreo以降の通知登録、Notification.Builder へ setChannelId を追加と NotificationChannel の利用が必須へ Android 8 (Oreo) 以降の通知生成 (わかりにくいので括弧で包んでます) // 通知をタップで起動するActivity Intent intent = new Intent(this, HogeActivity.class); // タップで呼ばれるActivity intent.putExtra("sendData", true); // Activityへ渡すデータ等(複数追加可) PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); // 通知生成 NotificationManager nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); { Notification.Builder nbuilder = new Notification.Builder(this); { nbuilder.setPriority(Notification.PRIORITY_DEFAULT); nbuilder.setContentTitle("タイトル"); nbuilder.setContentText("メッセージ"); ...

Android 8.0 (Oreo) 前後ショートカット作成方法の違い - Android Studio

イメージ
Android 8 (O) API26 からショートカットの作成方法が変わったのでメモ String shortcutName = "Shortcut Name"; Intent shortcutIntent = new Intent(Intent.ACTION_MAIN); shortcutIntent.setClassName(this, "com.example.myApplication"); // 呼び出すActivity shortcutIntent.putExtra("key1", "value1"); // 渡す情報() shortcutIntent.putExtra("key2", "value2"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android 8 O API26 以降 Icon icon = Icon.createWithResource(getApplicationContext(), R.mipmap.ic_shortcut); ShortcutInfo shortcut = new ShortcutInfo.Builder(getApplicationContext(), shortcutName) .setShortLabel(shortcutName) .setLongLabel(shortcutName) .setIcon(icon) .setIntent(shortcutIntent) .build(); ShortcutManager shortcutManager = getSystemService(ShortcutManager.class); shortcutManager.requestPinShortcut(shortcut, null); // フツーのショート...

WebView の Basic認証 NG時にリトライさせたい - Android Studio

WebView の Basic認証をダイアログ表示させるものの、入力情報が間違っていてもリトライしてくれない 認証エラーは onReceivedHttpError イベントの errorResponse.getStatusCode() == 401 を拾うことで捕捉可能ですが、ページを初めて開いた時も同じ401のイベントが発生するので注意が必要です 下記では authRun をダイアログ入力直後とするフラグを設けて onPageFinished や onReceivedError で解除を行っていますが、もっとスマートな方法は無いものだろうか... @Override @TargetApi(Build.VERSION_CODES.M) public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { super.onReceivedHttpError(view, request, errorResponse); if( request.isForMainFrame() && (errorResponse.getStatusCode() == 401) && authRun ){ authRun = false; view.reload(); } } 【追記】 上記コードは Android 6.0 (API 23) 以降用でで、それ以前は 同名のイベントが存在するものの... @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // < API 23 super.onReceivedError(view, errorCode, description, failingUrl); } これが全く使えないイベントで 401時に呼ばれるはするものの errorCode に -1 ...

Button のイベントを発生させる - Android Studio

ボタンのタップイベントを呼び出す ((Button)findViewById(R.id. myButton )).callOnClick();

Android ProgressBar の setAlpha は 0~1

Android で ProgressBar の setAlpha 設定を行ったメモ setAlpha の引き数 0~255 のパーツが多いみたいですが ProgressBar の setAlpha は 0(透明)~1(透過なし) の float 指定 progressBar.setApha(0.5f) とかです

Android ProgressBar のクルクルが環境によって表示されない

イメージ
Android の ProgressBar のクルクル(砂時計というのも古いのか)が実行環境によって表示されない 開発者向けオプションの「 Animator再生時間 」が オフになっていると 、そのものが 表示されません また、クルクルの速度はここの設定が反映されますが、あまり遅い 2x等にすると、ホーム画面のフォルダがモッサリしたりします

Android Studio で AdMob 導入手順が簡単になっていた

イメージ
SDKの容量がものすごいことになり(200GB)ついでに、Android Studio 2.3.3 を再インストールした環境で、久々に AdMob を利用しようとしたら、かなりやり方が変わっていたのでメモ AdMob にサインインして、広告ID(ca-app-pub-XXXXXXXXX みたいなの)を受け取るのは同じです 上記取得で、 Google Mobile Ads SDK をダウンロードしてください。 と出ますがリダイレクトループでダウンロードできませんし、よく手順解説で見かける  google-services.json へのダウンロードリンクもなくなってます という事で プロジェクトへの追加 は File - Project Structure を開いて、Ads の AdMob にチェックを入れて OK を押すだけ 必要なものがダウンロード?され build.gradle に項目が追加されます(たぶん) あとは AndroidManifest.xml に権限を追加 (無ければ)     <uses-permission android:name="android.permission.INTERNET">     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> レイアウトに広告ブロックを追加         <com.google.android.gms.ads.AdView             android:id="@+id/adView"             android:layout_width="wrap_content"             android:layout_height="wrap_content"           ...