当我们点击android中的默认消息应用程序时会发生什么。我的意思是它是否广播了一个意图?实际上我正在尝试制作一个应用程序,当用户点击消息图标时会在新活动中要求输入密码,并且只有在密码正确时才被重定向到消息列表。但是我的活动没有显示。这就是我的尝试方式做它。在清单中添加一个接收器。
<receiver android:name="Receiver">
<intent-filter android:priority="100">
<action android:name="android.intent.action.GET_CONTENT">
</action>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType = "vnd.android-dir/mms-sms" />
</intent-filter>
</receiver>
答案 0 :(得分:0)
您在询问“发起”活动。通常,这是通过如此创建的意图完成的:
Intent launch = new Intent(Intent.ACTION_MAIN);
launch.setPackage("com.your.package.name");
startActivity(launch);
由于设置了包名称,因此无法拦截此意图。它不会向任何接收者广播。
如果你编写了一个启动器应用程序,你可以拦截这样的启动请求并在它前面启动一个不同的应用程序。但是,通过返回默认的Android启动器,不可能阻止用户踩到这一步。
但是,还有其他几种“启动”“默认”短信应用程序的方法。例如,通过默认SMS应用程序发送请求SMS的应用程序将创建如下意图:
Intent launch = new Intent("android.intent.action.SENDTO");
还有其他几个。您的应用可以在清单中注册这些意图的活动,如下所示:
<activity
android:name="com.your.package.name.MyMessageActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android-dir/mms-sms" />
</intent-filter>
<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" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
在Android KitKat中,用户必须将您的应用程序实际设置为“默认SMS应用程序”,以便能够写入SMS提供程序/数据库并接收“SMS_DELIVER”意图。在Android的所有版本中,任何应用都可以注册“SMS_RECEIVED”意图但在KitKat +中它不能像早期版本一样中止。
您可能会注意到上面指定的一个过滤器与您的过滤器类似 - 使用mimeType "vnd.android-dir/mms-sms"
作为“DEFAULT”操作。这会将您的应用程序作为用户选择“完成操作使用”的一个选项,例如,当他们选择要发送消息的联系人时。
如果您执行了所有这些操作,那么您的活动可能需要密码才能“查看”消息。但是,您应该知道,除非您为邮件使用单独的数据存储,否则可以通过MMS-SMS提供程序读取所有SMS(假设应用程序已请求许可)。
答案 1 :(得分:0)
您想要实现的目标是不可能的,请看到: https://stackoverflow.com/a/21469133/2452039
您无法阻止使用外部应用打开本机应用。您唯一能做的就是拦截收到的邮件,阻止它们到达SMS应用程序收件箱,并将它们存储在您的应用程序中,并且您可以阻止它们打开。我必须警告你,因为API级别19不再可能......