2013-01-06 123 views
1

我已经看过所有的“常见”错误,但我没有做过(不幸)。RECEIVE_SMS广播接收器不工作?

我不能为了我的生活找出为什么(至少),我没有得到日志消息!

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.liamwli.spyware.usertrack" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="7" 
     android:targetSdkVersion="10" /> 

    <permission 
     android:name="com.liamwli.spyware.usertrack.permission.PREFS" 
     android:description="@string/permdisc" 
     android:label="Prefs" 
     android:logo="@drawable/ic_launcher" 
     android:protectionLevel="signature" > 
    </permission> 

    <uses-permission android:name="com.liamwli.spyware.usertrack.permission.PREFS" /> 

    <permission 
     android:name="com.liamwli.spyware.usertrack.permission.CONFIG" 
     android:description="@string/permdiscconfig" 
     android:label="Config" 
     android:logo="@drawable/ic_launcher" 
     android:protectionLevel="signature" > 
    </permission> 

    <uses-permission android:name="com.liamwli.spyware.usertrack.permission.CONFIG" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".ProcessSMS" 
      android:excludeFromRecents="true" 
      android:label="@string/app_name" > 
     </activity> 
     <activity android:name=".Launcher" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ActivityConfig" 
      android:excludeFromRecents="true" 
      android:exported="true" 
      android:label="@string/app_name" 
      android:permission="com.liamwli.spyware.usertrack.permission.CONFIG" > 
     </activity> 
     <activity 
      android:name=".Prefs" 
      android:permission="com.liamwli.spyware.usertrack.permission.PREFS" > 
      <intent-filter> 
       <action android:name="com.liamwli.spyware.usertrack.PREFS" /> 

       <category android:name="android.intent.cetagory.PREFERENCE" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".CodeReceive" 
      android:enabled="true" 
      android:excludeFromRecents="true" 
      android:exported="true" > 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SECRET_CODE" /> 

       <data android:scheme="android_secret_code" /> 
      </intent-filter> 
     </receiver> 
     <receiver 
      android:name=".ReceiveSMS" 
      android:enabled="true" 
      android:exported="true" > 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

ReceiveSMS.java: '收到的短信'

package com.liamwli.spyware.usertrack; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.telephony.SmsMessage; 
import android.util.Log; 

public class ReceiveSMS extends BroadcastReceiver { 

    SharedPreferences prefs; 
    SharedPreferences.Editor edit; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     Log.d("User Track", "SMS Received!"); 

     prefs = PreferenceManager.getDefaultSharedPreferences(context); 
     edit = prefs.edit(); 

     Bundle myBundle = intent.getExtras(); 
     SmsMessage[] messages = null; 
     String strMessage = ""; 

     if (myBundle != null) { 
      Object[] pdus = (Object[]) myBundle.get("pdus"); 
      messages = new SmsMessage[pdus.length]; 

      for (int i = 0; i < messages.length; i++) { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       if (messages[i].getMessageBody().toString() 
         .equals(prefs.getString("cbp_pass", null))) { 

        Log.d("User Track", "Message Equals Password!"); 
        Intent start = new Intent(context, ProcessSMS.class); 
        start.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        start.putExtra("Sender", 
          messages[i].getOriginatingAddress()); 
        context.startActivity(start); 

       } 

      } 

     } 
    } 
} 

我甚至不得到日志消息,这告诉我这根本不起作用。

第二个问题是,我怎样才能让短信绕过短信应用程序,只是去我的应用程序?

+7

'com.liamwli.spyware'你期待帮助吗?真的吗? – WarrenFaith

+0

@WarrenFaith我应该提到这是一个小型的私人爱好项目;)你*不会*看到它在互联网上的任何地方:) –

+0

是的,这将是一件很好的事情知道! :D ...等等,一个好的间谍软件应该在任何地方都看不到...所以我仍然希望你只用它来窥探你自己......或者保持它作为概念证明。 – WarrenFaith

回答

3

您没有android.permission.RECEIVE_SMS权限。添加

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

到您的清单。

+1

哦,天啊。我是*这样的*一个白痴。谢谢! –

0

自API级别23起,这对我有用。我们需要在运行时请求权限。希望这可以帮助任何有类似问题的人。 https://stackoverflow.com/a/35462909/4544780

+0

该链接的哪个部分对您有帮助? – marklark

+0

这里我们需要动态请求权限,并且在AndroidManifest.xml中配置似乎还不够。 马上就可以在这里提出的允许首次运行 'requestPermissions(Manifest.permission.RECEIVE_SMS,PERMISSIONS_REQUEST_RECEIVE_SMS);' 内,随着'checkSelfPermission()检查''为和PackageManager.PERMISSION_GRANTED'然后,问为它动态地处理请求结果。 'ActivityCompat.requestPermissions(this,new String [] {permission},requestCode);' –