gpt4 book ai didi

java - VFY : unable to resolve static method 10876: Android

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:52:18 27 4
gpt4 key购买 nike

我在我的程序中使用了 SmsCbMessage.java 类。它取自 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/telephony/SmsCbMessage.java#SmsCbMessage以下是我的程序。

package com.android.internal.telephony;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import android.telephony.SmsCbMessage;
import android.widget.Toast;

public class MainActivity extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//---get the CB message passed in---
Bundle bundle = intent.getExtras();
SmsCbMessage[] msgs = null;
String str = "";
if (bundle != null) {
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsCbMessage[pdus.length];
for (int i=0; i<msgs.length; i++) {
msgs[i] = SmsCbMessage.createFromPdu((byte[])pdus[i]);
str += "CB lang " + msgs[i].getLanguageCode();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
//---display the new CB message---
abortBroadcast();
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}
}

编译没有错误。但是运行的时候报如下错误

06-21 23:32:43.530    1951-1951/com.example.samitha.cbmessagespro I/dalvikvm﹕ Could not find method android.telephony.SmsCbMessage.createFromPdu, referenced from method com.android.internal.telephony.MainActivity.onReceive
06-21 23:32:43.530 1951-1951/com.example.samitha.cbmessagespro W/dalvikvm﹕ VFY: unable to resolve static method 10876: Landroid/telephony/SmsCbMessage;.createFromPdu ([B)Landroid/telephony/SmsCbMessage;
06-21 23:32:43.530 1951-1951/com.example.samitha.cbmessagespro W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41784c68)
06-21 23:32:45.580 1951-1951/com.example.samitha.cbmessagespro I/Process﹕ Sending signal. PID: 1951 SIG: 9

如何解决?

并不是说我在使用 SmsCbMessage.java 类时也包含了所有必需的依赖类。

最佳答案

如果您查看 SmsCbMessage@android.googlesource.com 的源代码

您会看到该类标有“@hide”属性

 /*
* ....
* @hide
*/
public class SmsCbMessage implements Parcelable {...

这意味着该类是 android 的一个实现细节,它不是公共(public) android api 的一部分,可以更改或删除,恕不另行通知。

SmsCbMessage@android.googlesource.com热有方法 public static SmsCbMessage createFromPdu(byte[] pdu) while your codefragment确实有。

您的测试设备确实有这个类,但没有静态方法。

如果你仍然想使用这个类,你可以将源代码添加到你的项目中并重命名包

[更新2015-06-25]

由于从 grepcodes 添加源到本地项目并不能解决问题,因为它有很多依赖项(尤其是 android.internal.*)

您可以创建自己的 MySmsCbMessage,它继承自设备 SmsCbMessage 类,并尝试从 grepcodes 源中添加缺少的功能。

public class MySmsCbMessage extends SmsCbMessage {

public static SmsCbMessage createFromPdu(byte[] pdu) {

try {
return new MySmsCbMessage(pdu);
} catch (IllegalArgumentException e) {
Log.w(LOG_TAG, "Failed parsing SMS-CB pdu", e);
return null;
}
}
}

这仍然是一个脆弱的解决方法,因为您不能确定其他设备是否会有 SmsCbMessage

关于java - VFY : unable to resolve static method 10876: Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30968072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com