【Android】プログラムから受信トレイのSMSを削除する方法を徹底解説
はじめに
このチュートリアルでは、Androidアプリからプログラムによって受信トレイ内のSMSメッセージを削除する方法を解説します。ContentResolverを使ってSMSプロバイダにアクセスし、メッセージを一括削除する流れを、実際のコード例とともにステップごとに見ていきましょう。
ステップ1:新規プロジェクトの作成
まず、Android Studioで新しいプロジェクトを作成します。メニューから「File → New Project」を選択し、必要な項目をすべて入力してプロジェクトのセットアップを完了させてください。
ステップ2:レイアウトファイル(activity_main.xml)の編集
次に、res/layout/activity_main.xmlに以下のコードを追加します。ここでは、画面中央に「Delete SMS」ボタンを配置したシンプルなレイアウトを定義しています。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/bt_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete SMS"
android:layout_centerInParent="true" />
</RelativeLayout>
ステップ3:MainActivity.java の実装
続いて、src/MainActivity.javaに以下のコードを追加します。ボタンがタップされるとdeleteSMS()メソッドが呼び出され、ContentResolver経由でcontent://sms/に対して削除処理を実行します。削除の成否はToastメッセージでユーザーに通知されます。
import android.content.Context;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
Button btn = (Button) findViewById(R.id.bt_delete);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (deleteSMS()) {
Toast.makeText(mContext, "Your message is deleted.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(mContext, "Sorry we can't delete messages.", Toast.LENGTH_LONG).show();
}
}
});
}
private boolean deleteSMS() {
boolean isDeleted = false;
try {
mContext.getContentResolver().delete(Uri.parse("content://sms/"), null, null);
isDeleted = true;
} catch (Exception ex) {
isDeleted = false;
}
return isDeleted;
}
}
ステップ4:AndroidManifest.xml への権限追加
SMSの読み書きには専用の権限が必要です。androidManifest.xmlに以下のパーミッション宣言を追加してください。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
アプリの実行と動作確認
それでは、アプリを実行してみましょう。実機のAndroid端末をパソコンに接続していることを前提とします。Android Studioからアプリを起動するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。接続済みの端末を選択して実行すると、端末に以下のような画面が表示されます。


開発時の注意点
Android 4.4(API 19)以降の制限: セキュリティ強化のため、Android 4.4以降ではデフォルトSMSアプリとして設定されているアプリ以外はSMSを削除できません。WRITE_SMS権限を宣言していても削除処理は失敗するため、テスト時には自アプリをデフォルトSMSアプリに設定するか、旧バージョンのOSを搭載した端末・エミュレータを使用してください。
実行時パーミッション: Android 6.0(API 23)以降では、READ_SMSおよびWRITE_SMSは「危険な権限」に分類されます。マニフェストへの宣言に加えて、requestPermissions()などによる実行時の権限リクエストも実装しておくと安心です。
-
Androidからマルウェアを削除する方法|感染の兆候と予防策を徹底解説
現代社会において、スマートフォンは生活に欠かせない存在となっています。銀行アプリ、ナビゲーションアプリ、各種ユーティリティアプリなど、個人の重要な情報や機能がほぼすべて詰まっています。だからこそ、プライバシーを守るためにも、スマートフォンをしっかりと保護することが何よりも重要です。パソコンと同様に、Androidスマートフォンもウイルス、トロイの木馬、スパイウェア、アドウェアなどの悪意あるプログラム(マルウェア)に感染する可能性があります。Androidマルウェアの主な目的は、機密情報の窃取、無関係な広告の表示によるユーザーの誤誘導、悪質なサイトへのリダイレクトなどです。マルウェアはさまざまな
-
【Android】サムネイルを削除してストレージ容量を解放する方法
サムネイルとは、スマートフォンに保存されている画像の縮小版のことです。ギャラリーアプリが自動的に作成する小さな画像で、デジタルギャラリーやアルバムの中で各画像をひと目で確認できるようにしてくれます。サムネイルを選択またはタップすると、実際の画像が全画面で開きます。つまり、Androidのギャラリーに表示されている小さな画像は本物の画像ではなく、スマートフォンのストレージ容量を占有している縮小コピーであることを理解しておきましょう。この記事では、Androidのサムネイルフォルダの場所と、サムネイルを削除してストレージ容量を解放する方法をご紹介します。 既存の画像のサムネイルを削除した場合、次に