为什么不能通过显式意图打开系统或其他应用的Activity

时间:2021-06-16 16:44:19
比如说我要打开自己定义的其他应用中的一个名叫XX的Activity.   
startActivity(new Intent(new.XX(), XX.class))为什么行不通呢?(已经导入jar包,可以调用普通类的方法,不能调用Activity.)  参数错了吗?new Intent(Context packageContext,Class<?> cla);

LogCat提示如下:

AndroidRuntime:         java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.dsa/com.example.dsa.MainActivity}: java.lang.NullPointerException
AndroidRuntime        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
AndroidRuntime         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
AndroidRuntime        at android.app.ActivityThread.access$600(ActivityThread.java:130)
AndroidRuntime        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
AndroidRuntime        at android.os.Handler.dispatchMessage(Handler.java:99)
AndroidRuntime         at android.os.Looper.loop(Looper.java:137)
AndroidRuntime        at android.app.ActivityThread.main(ActivityThread.java:4745)
AndroidRuntime        at java.lang.reflect.Method.invokeNative(Native Method)
AndroidRuntime        at java.lang.reflect.Method.invoke(Method.java:511)
AndroidRuntime         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
AndroidRuntime        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
AndroidRuntime        at dalvik.system.NativeStart.main(Native Method)
AndroidRuntime         Caused by: java.lang.NullPointerException
AndroidRuntime        at android.content.ContextWrapper.getPackageName(ContextWrapper.java:127)
AndroidRuntime         at android.content.ComponentName.<init>(ComponentName.java:75)
AndroidRuntime        at android.content.Intent.<init>(Intent.java:3301)
AndroidRuntime        at com.example.dsa.MainActivity.onCreate(MainActivity.java:18)
AndroidRuntime        at android.app.Activity.performCreate(Activity.java:5008)
AndroidRuntime        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
AndroidRuntime        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)3)

3 个解决方案

#1


上面那个new XX()获取不了包名.
传入context = createPackageContext("com.itheima.mobilesafe", CONTEXT_INCLUDE_CODE|CONTEXT_IGNORE_SECURITY); 这个参数也不行,LogCat提示have you declared this activity in your AndroidMainfest.xml? 配了也没用

#2


你说导入了jar包,那么反编译一下你的apk看看jar包的代码是不是已经打进去了,如果是的话就错了。

如果不是,那也可能是第三方app的class和jar包的class不一样。

一句话,不要用非主流手段写代码。

#3


倒入了jar包,需要到manifest里注册activity,而且你都做成jar包放到一起了,其实它们就是在一个应用里了,你用的是显示调用启动还是自己app里的activity

如果一定要启动别的应用的activity,还是用隐式调用最简单,让别的app的activity声明里价格intent-filter就行了,没必要这么纠结一定要用某种方法实现一个功能,其他的方法可以用就行

#1


上面那个new XX()获取不了包名.
传入context = createPackageContext("com.itheima.mobilesafe", CONTEXT_INCLUDE_CODE|CONTEXT_IGNORE_SECURITY); 这个参数也不行,LogCat提示have you declared this activity in your AndroidMainfest.xml? 配了也没用

#2


你说导入了jar包,那么反编译一下你的apk看看jar包的代码是不是已经打进去了,如果是的话就错了。

如果不是,那也可能是第三方app的class和jar包的class不一样。

一句话,不要用非主流手段写代码。

#3


倒入了jar包,需要到manifest里注册activity,而且你都做成jar包放到一起了,其实它们就是在一个应用里了,你用的是显示调用启动还是自己app里的activity

如果一定要启动别的应用的activity,还是用隐式调用最简单,让别的app的activity声明里价格intent-filter就行了,没必要这么纠结一定要用某种方法实现一个功能,其他的方法可以用就行