我正在尝试使用反射来访问电话API的一些未发布的功能.目前我无法实例化serviceManager将"电话"服务作为活页夹所需的对象,然后我可以使用该对象来实例化拨打电话,结束通话等所需的电话对象......
目前我打电话的时候
serviceManagerObject = tempInterfaceMethod.invoke(null, new Object[] { new Binder() });
Run Code Online (Sandbox Code Playgroud)
它返回nullPointerException.我相信这与创建一个新的Binder而不是发送适当的粘合剂(我不确定哪个是合适的)有关
public void placeReflectedCall() throws ClassNotFoundException,
SecurityException, NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException,
InstantiationException {
String serviceManagerName = "android.os.IServiceManager";
String serviceManagerNativeName = "android.os.ServiceManagerNative";
String telephonyName = "com.android.internal.telephony.ITelephony";
Class telephonyClass;
Class telephonyStubClass;
Class serviceManagerClass;
Class serviceManagerStubClass;
Class serviceManagerNativeClass;
Class serviceManagerNativeStubClass;
Method telephonyCall;
Method telephonyEndCall;
Method telephonyAnswerCall;
Method getDefault;
Method[] temps;
Constructor[] serviceManagerConstructor;
// Method getService;
Object telephonyObject;
Object serviceManagerObject;
String number = "1111111111";
telephonyClass = Class.forName(telephonyName);
telephonyStubClass = telephonyClass.getClasses()[0];
serviceManagerClass …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取一个电话对象,以便我可以在我的应用程序中呼叫和召开两个号码.
我试过使用静态PhoneFactory.makeDefaultPhones((Context)this)但没有运气.
String phoneFactoryName = "com.android.internal.telephony.PhoneFactory";
String phoneName = "com.android.internal.telephony.Phone";
Class phoneFactoryClass = Class.forName(phoneFactoryName);
Class phoneClass = Class.forName(phoneName);
Method getDefaultPhone = phoneFactoryClass.getMethod("getDefaultPhone");
Object phoneObject = getDefaultPhone.invoke(null);
Run Code Online (Sandbox Code Playgroud)
错误 - 由java.lang.RuntimeException引起:必须从Looper线程调用PhoneFactory.getDefaultPhone
在我们4.0发布的应用程序版本的过去两天里,我们已经看到了大约40起这些崩溃事件.在查看崩溃日志之后,我们发现它自我们的应用程序版本3.3起就存在了.我们无法在内部重现这一点.
进一步的研究表明这个问题在其他应用程序中很普遍,但我无法找到解决方案或表明Google已经意识到这个问题.
崩溃本身发生在onCreate()中的setContentView(R.layout.foo)方法调用上
笔记:
我们的可绘制文件夹看起来像附图 
堆栈跟踪:
android.content.res.Resources$NotFoundException: File res/drawable/ics_tab_title_unselected.xml from drawable resource ID #0x7f02016f
at android.content.res.Resources.loadDrawable(Resources.java:1697)
at android.content.res.Resources.getDrawable(Resources.java:581)
at android.view.View.setBackgroundResource(View.java:7533)
at com.evernote.ics.ActionBarTabbedTitle.a(ActionBarTabbedTitle.java:103)
at com.evernote.ics.j.a(ActivityActionBar.java:150)
at com.evernote.ics.a.c(ActionBar.java:731)
at com.evernote.ics.a.p(ActionBar.java:440)
at com.evernote.ics.a.g(ActionBar.java:423)
at com.evernote.ics.j.m(ActivityActionBar.java:68)
at com.evernote.ics.phone.SwipeableTabbedActivityAbstract.s(SwipeableTabbedActivityAbstract.java:990)
at com.evernote.ics.phone.SwipeableTabbedActivityAbstract.a(SwipeableTabbedActivityAbstract.java:662)
at com.evernote.ics.phone.SwipeableTabbedActivityAbstract.b(SwipeableTabbedActivityAbstract.java:617)
at com.evernote.ics.phone.PhoneMainActivity.b(PhoneMainActivity.java:113)
at com.evernote.ui.EvernoteFragment.a(EvernoteFragment.java:136)
at com.evernote.ui.EvernoteFragment.a(EvernoteFragment.java:132)
at com.evernote.ui.EvernoteFragment.d(EvernoteFragment.java:128)
at com.evernote.ics.phone.b.onItemClick(HomeFragment.java:1324)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3513)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at …Run Code Online (Sandbox Code Playgroud) 我目前正在使用AlertDialog.builder为用户创建多选列表(复选框).这很好用,除了我们想要其中一个按钮取消选择列表中的所有其他按钮.
builder.setMultiChoiceItems(list, checked,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog,
int item, boolean isChecked) {
if(item == ANY_ITEM_BUT_0)
{
((AlertDialog) dialog).getListView().setItemChecked(0, false);
}
}
});
Run Code Online (Sandbox Code Playgroud)
当使用"true"时它将成功检查该框,但是当使用false时它不会取消选中它(除非我手动将其手动设置为true.)是否有一个单独的监听器我应该用来检测用户何时单击这些?在我看来,有两个复选标记设置,一个由"setItemChecked(0,true);",一个通过实际选择它.
这已经让我疯了几天了,任何帮助都会非常感激.
我一直在查看反编译的APK文件中的一些代码,并运行此语法以返回我之前没有见过的布尔条件.有人解释这是如何工作的?
public static boolean is2G(NetworkType paramNetworkType)
{
if ((EDGE.equals(paramNetworkType)) || (IDEN.equals(paramNetworkType)) || (CDMA.equals(paramNetworkType)) || (GPRS.equals(paramNetworkType)));
for (int i = 1; ; i = 0)
return i;
}
Run Code Online (Sandbox Code Playgroud)