Android 我可以发送“;短信接收意向”;在安卓4.1.2中?

Android 我可以发送“;短信接收意向”;在安卓4.1.2中?,android,sms,Android,Sms,此代码不适用于android版本4.1.2 private static void createFakeSms(Context context, String sender,String body) { byte[] pdu = null; byte[] scBytes = PhoneNumberUtils.networkPortionToCalledPartyBCD("0000000000"); byte[] senderBytes = PhoneNumberUtils.netw

此代码不适用于android版本4.1.2

private static void createFakeSms(Context context, String sender,String body) 
{
  byte[] pdu = null;
  byte[] scBytes = PhoneNumberUtils.networkPortionToCalledPartyBCD("0000000000");
  byte[] senderBytes = PhoneNumberUtils.networkPortionToCalledPartyBCD(sender);
  int lsmcs = scBytes.length;
  byte[] dateBytes = new byte[7];
  Calendar calendar = new GregorianCalendar();
  dateBytes[0] = reverseByte((byte) (calendar.get(Calendar.YEAR)));
  dateBytes[1] = reverseByte((byte) (calendar.get(Calendar.MONTH) + 1));
  dateBytes[2] = reverseByte((byte) (calendar.get(Calendar.DAY_OF_MONTH)));
  dateBytes[3] = reverseByte((byte) (calendar.get(Calendar.HOUR_OF_DAY)));
  dateBytes[4] = reverseByte((byte) (calendar.get(Calendar.MINUTE)));
  dateBytes[5] = reverseByte((byte) (calendar.get(Calendar.SECOND)));
  dateBytes[6] = reverseByte((byte) ((calendar.get(Calendar.ZONE_OFFSET) + calendar
 .get(Calendar.DST_OFFSET)) / (60 * 1000 * 15)));
  try 
  {
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    bo.write(lsmcs);
    bo.write(scBytes);
    bo.write(0x04);
    bo.write((byte) sender.length());
    bo.write(senderBytes);
    bo.write(0x00);
    bo.write(0x00); // encoding: 0 for default 7bit
    bo.write(dateBytes);
    try 
    {
      String sReflectedClassName = "com.android.internal.telephony.GsmAlphabet";
      Class cReflectedNFCExtras = Class.forName(sReflectedClassName);
      Method stringToGsm7BitPacked = cReflectedNFCExtras.getMethod(
      "stringToGsm7BitPacked", new Class[] { String.class });
      stringToGsm7BitPacked.setAccessible(true);
      byte[] bodybytes = (byte[]) stringToGsm7BitPacked.invoke(null,body);
      bo.write(bodybytes);
     } 
     catch (Exception e) 
     {
     }
     pdu = bo.toByteArray();
     }  
     catch (IOException e) 
     {
     }
    Intent intent = new Intent();
    intent.setClassName("com.android.mms",
            "com.android.mms.transaction.SmsReceiverService");
    intent.setAction("android.provider.Telephony.SMS_RECEIVED");
    intent.putExtra("pdus", new Object[] { pdu });
    intent.putExtra("format", "3gpp");
    context.startService(intent);
}

private static byte reverseByte(byte b) {
    return (byte) ((b & 0xF0) >> 4 | (b & 0x0F) << 4);
}
在虚拟设备4.1.2上,它可以完美地工作,但在我的GS2设备上则不行


有人能帮我吗?

在新版Android中,这是一个受保护的广播,出于安全原因,只能由系统应用程序发送


让你的应用程序发送它的唯一方法是说服OEM将其作为ROM上的系统应用程序在较新版本的Android中这是一个受保护的广播,出于安全原因,只能由系统应用程序发送


让您的应用程序发送它的唯一方法是说服OEM将其作为ROM上的系统应用程序

谢谢!!现在我给安卓OEM打电话,试图说服他们。:-)谢谢现在我给安卓OEM打电话,试图说服他们。:-)
java.lang.SecurityException: Not allowed to start service Intent { act=android.provider.Telephony.SMS_RECEIVED cmp=com.android.mms/.transaction.SmsReceiverService (has extras) } without permission not exported from uid 10046**