2014-04-03 59 views
0

当我们点击android.I中的默认消息应用程序时,会发生什么情况意味着它是否会广播一个意图?其实我试图做一个应用程序,要求在新的活动密码,当用户点击消息图标,并重定向到邮件列表只有当密码是正确的。但我的活动不显示。这是我如何做到这一点。在清单中添加了一个接收器。接收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

我是新来的android.So如果我有任何错误的概念plz帮助我 – Asu

+0

你应该更好地解释它。但我会尝试解释一些事情: 收到SMS消息时,将广播新的意图,并且意图可以由一个或多个对该意图感兴趣的应用程序处理。 现在,我不明白的是: 1-您的应用试图拦截/存储短信? 2-您是否在收到消息时尝试启动活动? –

+0

我希望应用程序像邮件储物柜一样工作。所以当用户点击Android的消息图标我的应用程序应该要求输入密码。我的应用程序不试图拦截或存储消息。我无法弄清楚的是如何知道当用户点击Android的默认消息应用程序? – Asu

回答

0

您在询问有关“启动”的活动。通常情况下,创建的目的是这样做的:

Intent launch = new Intent(Intent.ACTION_MAIN); 
launch.setPackage("com.your.package.name"); 
startActivity(launch); 

因为已设置包名称,所以不能拦截此意图。它不会被广播给任何接收者。

如果你编写一个启动程序,你可以拦截这样一个启动请求,并在它前面启动一个不同的应用程序。但是,通过返回到默认的Android启动程序,阻止用户侧置这一点是不可能的。

但是,还有其他几种“启动”“默认”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的奇巧,用户必须实际上为了它能够写为设置你的应用程序的“默认的短信应用” SMS提供者/数据库,并且还接收“SMS_DELIVER”意图。在Android的所有版本中,任何应用程序都可以注册“SMS_RECEIVED”意图,但在KitKat +中不能中止,就像在早期版本中一样。

您可能会注意到上面指定的一个过滤器与您的过滤器类似 - 使用mimeType "vnd.android-dir/mms-sms"作为“DEFAULT”操作。例如,当他们选择他们想要发送消息的联系人时,这会将您的应用作为用户“完成操作使用”的一个选项。

如果你这样做,那么你的活动可能需要密码才能“查看”消息。但是,您应该知道,除非您正在使用单独的数据存储区来存储消息,否则可以通过MMS-SMS提供程序读取所有SMS(假设应用程序已经请求允许这样做)。

+0

谢谢!..但是,当用户点击默认消息应用程序来查看所有消息以便它可以要求输入密码时,我的应用程序可以知道吗?就像我们在某些手机中锁定消息应用程序时发生的那样。 – Asu

+0

我编辑了我的回复 - 您无法阻止另一个应用程序启动,而无需启动应用程序。 – Jim

+0

所以没有办法实现我想要做的? – Asu

0

什么你正在努力实现是不可能的,请看到这一点: https://stackoverflow.com/a/21469133/2452039

你不能阻止本机应用程序从与外部应用程序打开。你唯一能做的就是拦截收到的消息,阻止他们到达SMS应用程序的收件箱,并将它们存储在你的应用程序中,并且你可以阻止它们打开。我必须警告你,因为API级别19不再可能...