如何在 Android Studio 中创建项目以运行默认 SMS 应用程序
Posted
技术标签:
【中文标题】如何在 Android Studio 中创建项目以运行默认 SMS 应用程序【英文标题】:How can I create a project in Android Studio to function default SMS app 【发布时间】:2016-11-09 22:02:28 【问题描述】:上一个查询的继续,见:SMS Receiver for AND API 19 and higher
我需要让应用程序在后台运行,我可以在安装设置为默认设置后拥有它,如下所示:http://android-developers.blogspot.cz/2013/10/getting-your-sms-apps-ready-for-kitkat.html
所以我问如何创建一个项目来显示“Super Duper SMS”列表,最终设置为默认值。
整个程序必须作为服务运行,基本功能不需要任何屏幕接收短信并且应该在核心android中注册
感谢您的建议
【问题讨论】:
再一次,您的问题有点不清楚,但this post 显示了您的应用程序有资格成为默认短信应用程序所需的最低要求。请注意,您未实现的任何功能很可能对用户根本不可用 - 例如发送消息、处理 MMS 等 - 因为其他 SMS 应用程序在它们不是默认功能时会禁用这些功能。 【参考方案1】:我尝试使用此代码对我有帮助...
manifests.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.newsmsapp">
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/smsicon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="com.example.newsmsapp.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity android:name="com.example.newsmsapp.ComposeSMS">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<action android:name="android.intent.action.SENDTO"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.LAUNCHER" />
<data android:scheme="sms"/>
<data android:scheme="smsto"/>
<data android:scheme="mms"/>
<data android:scheme="mmsto"/>
</intent-filter>
</activity>
<receiver
android:name="com.example.newsmsapp.SMSReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
<activity
android:name="com.example.newsmsapp.NotificationView"
android:label="@string/title_activity_notification_view"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<receiver android:name="com.example.newsmsapp.MMSReceiver" android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER"/>
<data android:mimeType="application/vnd.wap.mms-message"/>
</intent-filter>
</receiver>
<service android:name="com.example.newsmsapp.HandlessSMSSendService"
android:exported="true"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE"/>
<data android:scheme="sms"/>
<data android:scheme="smsto"/>
<data android:scheme="mms"/>
<data android:scheme="mmsto"/>
</intent-filter>
</service>
</application>
然后为smsReader、mmsReader、ComposeSMS、HeadlessSMSservice创建4个文件
smsReader.java
public class SMSReceiver extends BroadcastReceiver
Notification notification;//=new Notification(R.drawable.icon,"New Message",System.currentTimeMillis());
NotificationManager notificationmaneger;
String SMSmsg;
public SMSReceiver()
public static final String SMS_BUNDLE = "pdus";
@Override
public void onReceive(Context context, Intent intent)
Bundle intentExtras = intent.getExtras();
if (intentExtras != null)
Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
String smsMessageStr = "";
for (int i = 0; i < sms.length; ++i)
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
String smsBody = smsMessage.getMessageBody().toString();
String address = smsMessage.getOriginatingAddress();
smsMessageStr += "SMS From: " + address + "\n";
smsMessageStr += smsBody + "\n";
builder.setAutoCancel(true);
// builder.setTicker("this is ticker text");
builder.setContentTitle("New Messge");
builder.setContentText(SMSmsg);
builder.setSmallIcon(R.drawable.smsicon);
builder.setColor(context.getResources().getColor(R.color.colorAccent));
builder.setContentIntent(pendingIntent);
builder.setOngoing(true);
// builder.setSubText("You have pending tax"); //API level 16
//builder.setNumber(100);
builder.build();
SMSmsg=smsMessageStr;
mmsReader.java
public class MMSReceiver extends BroadcastReceiver
public MMSReceiver()
@Override
public void onReceive(Context context, Intent intent)
ComposeSMS.java
public class ComposeSMS extends Activity
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
HeadlessSMSservices.java
public class HandlessSMSSendService extends Service
@Nullable
@Override
public IBinder onBind(Intent intent)
return null;
如果你想看短信,那么在 composeSMS.java 中添加 listview 并将接收到的数据从 sms 表绑定到 listview 适配器。
【讨论】:
在没有关键功能的情况下发布尽可能多的代码是没有意义的!以上是关于如何在 Android Studio 中创建项目以运行默认 SMS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在 Android Studio 中创建新项目时如何选择目标 API 级别?
在哪里可以找到系统映像以在 Android Studio 中创建虚拟设备
如何在 Android Studio 的 datasnapshot/recyclerview 中创建条件?