スキップしてメイン コンテンツに移動

投稿

[Android]ServiceからのActivityの起動

ServiceからActivityを起動するには、以下のようにします。 Intent intent = new Intent(getApplication(), Activityクラス名.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplication().startActivity(intent); 上記の手順では、HOMEボタンでのアプリ切り替え後5秒間は、ほかのActivityを起動できない制限を受けます。 そのような場合は、PendingIntentを使うと解消されます。 Intent intent = new Intent(getApplication(), Activityクラス名.class); PendingIntent pendingIntent = PendingIntent.getActivity(getApplication(), 777, intent, PendingIntent.FLAG_UPDATE_CURRENT); pendingIntent.send(); Android10以降では、サービスからのActivity起動が抑制されているようです。 (参照) android.permission.SYSTEM_ALERT_WINDOWを取得することで解決できます。 AndroidManifest.xmlにPermissionを追加します。 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /&rt; OVERLAY_PERMISSIONを得る処理を実行します。 以下の関数は、Permissionがあれば、trueを返し、無ければfalseを返します。 Permissionが無い場合は、設定を行うActivityを表示します。 public static int OVERLAY_PERMISSION_REQ_CODE = 1000; @TargetApi(Build.VERSION_CODES.M) public boolean checkPermission_Draw

[Android]「通信量モニター」 を公開しました

楽天の新プランに触発され、Androidアプリ「通信量モニター」 を公開しました。 ■特徴・使い方 1か月の通信量を表示するアプリです。 以下の機能を持っています。 ・Wi-Fiと携帯回線の通信量の表示 ・今月の通信状況のグラフ表示 ・楽天、docomo、au、Softbankなど各キャリアに合わせた上限値の設定 ・各アプリの通信料のグラフ表示 ■ダウンロード 以下からダウンロードできます。

[Android]画像切り抜きアプリを公開しました。

Androidアプリ「連続・画像切り抜きアプリ」 を公開しました。 ■特徴・使い方 このアプリは、シンプルに画像の切り抜きだけを行うアプリです。 使い方は単純です。 1. 切り抜く画像を選択する。 2. 切り抜く範囲を指定する。 3. 切り抜きを開始して、終わるまで待つ。 これで、画像フォルダに切り抜いた画像が保存されます。 ■ダウンロード 以下からダウンロードできます。

[Android] 設定画面を簡単に作る方法(ListPreference)

Androidには、設定画面を作成するライブラリ「 AndroidX Preference Library 」が用意されています。 このライブラリを使用し、設定画面を作成する手順は以下となります。 1. appレベルのbuild.gradleにライブラリを追加する androidx.preference:preference を使うためにbuild.gradleのdependenciesに以下を追加します。 dependencies {     implementation 'androidx.preference:preference:1.1.1' } 2. 設定ページレイアウトを作成する res/xml ディレクトリに 設定ページレイアウト(XML ファイル)を作成します。 この例では「preferences.xml」としています。 <PreferenceScreen     xmlns:app="http://schemas.android.com/apk/res-auto">     <ListPreference         app:key="list_setting"         app:title="List Preference"         /> </PreferenceScreen> 3. ListPrefrenceに設定値を追加する ListPrefrenceできる値は、res/values/arrays.xmlに作成できます。 <?xml version="1.0" encoding="utf-8"?> <resources>     <string-array name="settings_entries">         <item>setting 1</item>         <item>setting 2</item>         <item>setting 3</item>     </strin

[Android]Media Storeへの画像の保存

Android11から共通フォルダへの直接アクセスができなくなりました。画像などを共有フォルダに保存する場合はMediaStore APIを使用します。 画像をMediaStore APIで保存する場合は、以下のように行います。 private void saveImageWithMediaStore(Bitmap bmp, String display_name){ ContentValues values = new ContentValues(); // コンテンツ クエリの列名 // ファイル名 values.put(MediaStore.Images.Media.DISPLAY_NAME, display_name); // マイムの設定 values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); // 書込み時にメディア ファイルに排他的にアクセスする values.put(MediaStore.Images.Media.IS_PENDING, 1); ContentResolver resolver = getActivity().getContentResolver(); Uri collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY); Uri item = resolver.insert(collection, values); try (OutputStream outstream = resolver.openOutputStream(item)) { bmp.compress(Bitmap.CompressFormat.JPEG, 70, outstream); } catch (IOException e) { e.printStackTrace(); } values.clear(); // 排他的にアクセスの解除 values.put(MediaStore.Images.Media.IS_PENDING, 0); resolver.update(item, values, n

[Android]ACTION_OPEN_DOCUMENTを使って複数選択を行う

Intent.ACTION_OPEN_DOCUMENTを使用して複数ファイル選択を行うときは、Intent.EXTRA_ALLOW_MULTIPLEをセットします。コードでは以下のようになります。 Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_OPEN_DOCUMENT); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); String title = "Select multiple images"; Intent chooser = Intent.createChooser(intent, title); startActivityForResult(chooser, CHOSE_FILE_CODE); 上記のコードで、以下のActivityが起動します。画像を長押しで複数選択できるようになります。 ファイルの取得は以下のように行います。 public void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode != RESULT_OK)return; if (requestCode != CHOSE_FILE_CODE) return; if (data.getData() != null) { getActivity().getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_READ_URI_PERMISSION); } else { ClipData clipData = data.getClipData(); int clipItemCount = clipData.getItemCount(); for (int i = 0; i < clipItemCount; i++) { ClipData.Item item = clipData.getItem

[C#][WPF][WinForms]RichTextBoxで画像(JPEG)を挿入する。

WPF/WinFormsで提供されるRichTextBoxを簡単にWORDのような機能を提供してくれますが、画像挿入やテーブル追加の機能がありません。  これらの機能を実現するには、 RTFの仕様 に従い文字列でデータを追加する必要があります。 コードは以下のようになります。 private const string RTF_HEADER = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033"; private const string RTF_DOCUMENT_POST = @"\cf0\fs17}"; public void InsertImage(RichTextBox rtfbox, Image _image) { StringBuilder _rtf = new StringBuilder(); // Append the RTF header _rtf.Append(RTF_HEADER); // Create the Windows Metafile and append its bytes in HEX format _rtf.Append(InsertJpgImage(_image)); //Close RTF header _rtf.Append(RTF_IMAGE_POST); rtfbox.SelectedRtf = _rtf.ToString(); } private static string GetWidthAndHeight(Image image, float dpiX, float dpiY){ float width = (float)image.Width / dpiX; float height = (float)image.Height / dpiY; int picw = (int)(width * 2540); int pich = (int)(height * 2540); int picwgoal = (int)(width * 1440); int pichgoal = (int)(height * 1440); return "\\picw" + p