为什么getPackageManager返回null

时间:2017-08-08 14:09:56

标签: android nullpointerexception accessibilityservice

所以我正在尝试在我的AccessibilityService内启动另一个应用程序但是我继续得到以下java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference,即使我在MainActivity.class中使用相同的方法也可以。我知道包名是正确的,因为我说我在MainActivity.class

中称呼它

这是我调用该函数的类。

public class myAdapter extends Application
{
   private void turnOn(String text)
   {
       Intent b = getPackageManager().getLaunchIntentForPackage(text);
       startActivity(b);
   }
}

我尝试了各种方法来调用同一个函数。

Intent b = getApplicationContext().getgetPackageManager().getLaunchIntentForPackage(appName);
getApplicationContext().startActivity(b);

  Intent b = getApplicationContext().getgetPackageManager().getLaunchIntentForPackage(appName);
getApplicationContext().startActivity(b);

我的Logcat:

Process: com.tech.myApp, PID: 17195
                                                              java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
                                                                           at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:106)
                                                                           at com.tech.myApp.turnOn(myAdapter.java:198)    

2 个答案:

答案 0 :(得分:0)

您说您尝试从Activity开始AccessibilityService,但您的代码非常清楚地表明您的班级正在扩展Application。这很令人困惑,也可能是您对这些NullPointerExceptions的核心问题之一。我将根据你的问题描述中提到的AccessibilityService类来尝试这个问题,我会说明我的答案,即使这与你发布的代码有很大冲突。如果确实如此,您应该更新此问题以澄清。如果这个答案对您没有帮助,那么您的问题需要大量的TLC。

一旦我们意识到我们处于AccessibilityService之内,我们就会发现有一种更简单的方法来完成一项活动。在Activity中开始另一个AccessibilityService就像下面的代码片段一样简单:

public class A11yService extends AccessibilityService {

    void startMainActivityFromService() {

        final Intent intent = new Intent(this, MainActivity.class);

        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        startActivity(intent);
    }
}

这很容易!

答案 1 :(得分:-1)

好的,我必须要做的就是在 Document doc = Jsoup.connect(url).get(); Element time = doc.select("li").get(1); String text = time.text(); 创建一个静态上下文。然后,我可以从任何其他类中提取,甚至是在后台运行的类。

MainActivity.class

然后在我的其他课程或活动或服务中,我使用它:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private static Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MainActivity.context = getApplicationContext();

    // CALL MY FUCTION - THIS COULD BE ANYWHERE NOW
    startApp(app name you want to start);
}
}