【发布时间】:2016-10-07 11:00:28
【问题描述】:
我正在使用下面的代码来删除 SMS,它在 android 版本 5.0.2 上运行良好,但在 6.0.1 上无法运行。该代码是为 API-22(targetSdkVersion) 构建的,因为我想避免应用程序中的运行时权限模型。
public static void deleteSTMessage()
{
String SMS_INBOX= "content://sms/";
Uri inboxURI = Uri.parse(SMS_INBOX);
Cursor c = STApplication.getContext().getContentResolver().query(inboxURI, new String[] { "_id", "thread_id", "address", "person",
"date", "body" }, null, null, null);
try {
while (c.moveToNext()) {
try {
if (c != null && c.moveToFirst()) {
do {
String address=c.getString(2);
String id= c.getString(0);
long threadId = c.getLong(1);
// String stringFromBase = c.getString(5);
try
{
if(address.equalsIgnoreCase(AppConfig.DESTINATION_ADDRESS))
{
int deltedrowcount = STApplication.getContext().getContentResolver().delete(Uri.parse("content://sms/" + id), null, null);
FileLog.v(TAG, "- ST Client SMS has Deleted successfully " );
}
}catch (Exception e){
FileLog.v(TAG,"- Exception in deleting SMS "+e.getLocalizedMessage());
}
} while (c.moveToNext());
}
} catch (Exception e) {
FileLog.v(TAG,"- Exception in deleting SMS "+e.getLocalizedMessage());
}
}
}catch (Exception e){
FileLog.v(TAG,"- Exception in deleting SMS "+e.getLocalizedMessage());
}finally {
c.close();
}
}
Manifest.xml 如下所示
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:name=".application.STApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:manageSpaceActivity=".ManageSpaceActivity"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".BaseActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ManageSpaceActivity"/>
<service
android:name=".services.ServiceMain"
android:exported="false" />
<receiver android:name=".receivers.STPowerOffReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
<action android:name="android.intent.action.REBOOT"/>
</intent-filter>
</receiver>
<receiver android:name=".receivers.STBootReciever">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver android:name=".receivers.STSimChangedReceiver">
<intent-filter>
<action android:name="android.intent.action.SIM_STATE_CHANGED" />
</intent-filter>
</receiver>
</application>
它允许我阅读短信,但是当我试图通过代码删除短信受影响的行数时返回 0。经过一番谷歌搜索后,我从link 了解到,从 API-19 开始,除非您将应用程序创建为默认 SMS 应用程序,否则您无法正常使用 SMS,但我不想创建成熟的 SMS 默认 SMS 客户端,如我的应用没有任何用户交互。
我也有疑问,如果从 KITKAT 删除 SMS 对棒棒糖起作用,SMS API 发生了变化。
我只需要在 ANDROID-M 中从所有已发送/收件箱/未发送的地方删除特定收件人电话号码的短信 如果你们看不懂我的英语,请帮助我并原谅我 提前致谢
【问题讨论】:
标签: sms android-contentprovider android-6.0-marshmallow android-permissions smsmanager