我正在更新公司应用程序的代码,大约有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)
不再有效。
如何构建我的课程来实现这一目标?或者我是以错误的方式解决这个问题。
答案 0 :(得分:3)
如何构建我的课程来实现这一目标?
步骤1:在实用程序类上使其成为静态方法。
步骤2:将Context ctxt
作为参数添加到方法中。
步骤3:对于在getPackageManager()
上实施的startActivity()
和Context
等方法,请在传入的ctxt
参数上调用它们。
步骤#4:用尺子敲打手腕以使用字符串连接来创建文件路径,并以正确的方式执行。
步骤5:删除您未使用的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 :(得分:1)
public class PDFUtlity{
public static void showPdf(Context context)
{
File file = new File(Environment.getExternalStorageDirectory()+"/pdf/Read.pdf");
PackageManager packageManager = context.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");
((Activity)context).startActivity(intent);
}
}
public class MyActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
///.....
PDFUtlity.showPdf(this);
}
}