Java 如何使用实用程序类启动intent android

Java 如何使用实用程序类启动intent android,java,android,scope,android-activity,Java,Android,Scope,Android Activity,我正在更新一个公司应用程序的代码,大约有20个活动类都下载了PDF,然后使用以下代码显示: public void showPdf() { File file = new File(Environment.getExternalStorageDirectory()+"/pdf/Read.pdf"); PackageManager packageManager = getPackageManager(); Intent testIntent = new Intent(Int

我正在更新一个公司应用程序的代码,大约有20个活动类都下载了PDF,然后使用以下代码显示:

public void showPdf()
{
    File file = new File(Environment.getExternalStorageDirectory()+"/pdf/Read.pdf");
    PackageManager packageManager = getPackageManager();
    Intent testIntent = new Intent(Intent.ACTION_VIEW);
    testIntent.setType("application/pdf");
    List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    Uri uri = Uri.fromFile(file);
    intent.setDataAndType(uri, "application/pdf");
    startActivity(intent);
}
代码正在工作,但是它已在所有20个类中复制(对我来说似乎非常糟糕),我想将其放入一个类中,每个活动类都导入该类,但是当我尝试这样做时,像
getPackageManager()
startActivity(intent)
之类的事情不再起作用

我如何组织我的班级来实现这一点?还是我走错了方向

我如何组织我的班级来实现这一点

步骤#1:使其成为实用程序类上的静态方法

步骤2:将
Context ctxt
作为参数添加到方法中

步骤#3:对于在
Context
上实现的
getPackageManager()
startActivity()
等方法,在传入的
ctxt
参数上调用它们

第四步:用尺子拍打手腕,使用字符串连接创建文件路径,并正确操作

第五步:去掉你不使用的
queryIntentActivities()
代码

public static void showPdf(Context ctxt)
{
    File file = new File(Environment.getExternalStorageDirectory(), "/pdf/Read.pdf");
    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri.fromFile(file), "application/pdf");
    startActivity(intent);
}
步骤6:让当前正在调用的位置调用
showPdf()
调用
YourUtilityClass.showPdf(this)

我如何组织我的班级来实现这一点

步骤#1:使其成为实用程序类上的静态方法

步骤2:将
Context ctxt
作为参数添加到方法中

步骤#3:对于在
Context
上实现的
getPackageManager()
startActivity()
等方法,在传入的
ctxt
参数上调用它们

第四步:用尺子拍打手腕,使用字符串连接创建文件路径,并正确操作

第五步:去掉你不使用的
queryIntentActivities()
代码

public static void showPdf(Context ctxt)
{
    File file = new File(Environment.getExternalStorageDirectory(), "/pdf/Read.pdf");
    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri.fromFile(file), "application/pdf");
    startActivity(intent);
}

步骤6:让当前正在调用的位置调用
showPdf()
call
YourUtilityClass.showPdf(this)

最后,我用您的第一个注释创建了一个活动类,然后为所有其他类创建了子类。这种静态方法会比那更好吗?是的,它会。我的第一个解决方案
创建一个扩展Activity的类,并在新类中实现该方法,然后扩展您创建的新类
将是一个更好的做法,因为您必须在每个活动中重写Activity方法,例如:onBackPressed、onSaveInstanceState、onRestoreInstanceState(对于与上下文密切相关的方法,然后在每个扩展此类类的活动中,必须调用super();)但后来我又读了一遍你的问题,意识到你的问题不需要这样的设计模式。我最终用你的第一个注释创建了一个活动类,然后为所有其他类创建了子类。这个静态方法比那个更好吗?是的,它会。我的第一个解决方案
创建了一个xtends Activity并在新类中实现该方法,然后扩展您创建的新类
,这是一种更好的做法,因为您必须在每个活动中重写活动方法,例如:onBackPressed、onSaveInstanceState、onRestoreInstanceState(对于与上下文密切相关的方法,然后在每个扩展此类类的活动中,必须调用super();)但后来我又读了一遍你的问题,意识到没有必要用这样的设计模式来解决你的问题。我最终创建了一个活动类
ActivityDisplayPDF
,然后将20个类中的每一个都更改为扩展
ActivityDisplayPDF
。你的答案也会起作用,我想知道哪一个是更好的实践。@Ben:Forc对于这么小的东西,继承通常不是一个好主意。例如,如果您需要从
首选项活动
?或从
列表活动
?显示此PDF,会发生什么情况?现在您要么必须克隆
活动显示PDF
,要么必须切换到我的解决方案(或类似的解决方案)。我最终创建了一个activity类
ActivityDisplayPDF
,然后将20个类中的每一个都更改为扩展
ActivityDisplayPDF
。你的答案也会起作用,我想知道哪种做法更好。@Ben:对于这么小的东西,强制继承通常不是一个好主意。例如,如果你需要如何从
首选项活动
?或从
列表活动
?复制此PDF?现在您要么克隆
活动显示PDF
,要么切换到我的解决方案(或类似的解决方案)。