Java 如何使用实用程序类启动intent android
我正在更新一个公司应用程序的代码,大约有20个活动类都下载了PDF,然后使用以下代码显示: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
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()
callYourUtilityClass.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
,要么切换到我的解决方案(或类似的解决方案)。