Vorrei aprire un file PDF quando l'utente fa clic su un pulsante. Attualmente, sto usando questo codice per ottenere questo:Impossibile aprire il file PDF nell'app esterna
Uri path = Uri.fromFile(new File("file:///android_asset/regola11_1.pdf"));
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(pdfIntent);
ma non funziona.
quando seleziono di utilizzare Adobe Acrobat, ricevo un messaggio, visualizzato come un brindisi, che dice
"This file could not be accessed Check the location or the network and try again."
Quando provo con azionamento PDF Viewer, ottengo
"Cannot display PDF (regola11_1.pdf cannot be opened)"
Il PDF il file è memorizzato in
app > build > intermediates > assets
Dove è il problema?
EDIT
Ora sto utilizzando il seguente codice:
File file = new File("\"file:///android_asset/regola11_1.pdf");
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
context.startActivity(intent);
}
catch (ActivityNotFoundException e) {
Toast.makeText(context, "No application available to view PDF", Toast.LENGTH_LONG).show();
}
Ma quando provo ad aprire il PDF cliccando sul pulsante, l'applicazione si blocca.
Questo è il log ottengo:
05-31 10:05:25.132 24474-24474/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.andrey.andreyvedis.iamaref, PID: 24474
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.Context.startActivity(android.content.Intent)' on a null object reference
at com.andrey.andreyvedis.iamaref.FragmentR11.onClick(FragmentR11.java:147)
at android.view.View.performClick(View.java:4781)
at android.view.View$PerformClick.run(View.java:19873)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5293)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
Questa è la mia classe:
public class FragmentR11 extends Fragment implements View.OnClickListener{
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
Context context;
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment FragmentR11.
*/
// TODO: Rename and change types and number of parameters
public static FragmentR11 newInstance(String param1, String param2) {
FragmentR11 fragment = new FragmentR11();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
public FragmentR11() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_r11, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().findViewById(R.id.bD1).setOnClickListener(this);
getActivity().findViewById(R.id.bD2).setOnClickListener(this);
getActivity().findViewById(R.id.bD3).setOnClickListener(this);
getActivity().findViewById(R.id.bD4).setOnClickListener(this);
getActivity().findViewById(R.id.bD5).setOnClickListener(this);
getActivity().findViewById(R.id.bD6).setOnClickListener(this);
getActivity().findViewById(R.id.bD7).setOnClickListener(this);
getActivity().findViewById(R.id.bD8).setOnClickListener(this);
getActivity().findViewById(R.id.bD9).setOnClickListener(this);
getActivity().findViewById(R.id.bD10).setOnClickListener(this);
getActivity().findViewById(R.id.bD11).setOnClickListener(this);
getActivity().findViewById(R.id.bD12).setOnClickListener(this);
getActivity().findViewById(R.id.bD13).setOnClickListener(this);
getActivity().findViewById(R.id.bD14).setOnClickListener(this);
getActivity().findViewById(R.id.bD15).setOnClickListener(this);
getActivity().findViewById(R.id.bD16).setOnClickListener(this);
getActivity().findViewById(R.id.bD17).setOnClickListener(this);
}
/**private void openPDF(final String pathToPDF) {
File file = new File(pathToPDF);
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setDataAndType(path, "application/pdf");
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(getActivity(), "Devi installare un'app per aprire PDF, come Adobe Acrobat Reader ", Toast.LENGTH_SHORT).show();
}
}*/
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.bD1: {
/**Uri path = Uri.fromFile(new File("regola11_1.pdf"));
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(pdfIntent);
Toast.makeText(getActivity(), "Hai cliccato Regola 1 in Reg11 ", Toast.LENGTH_SHORT).show();*/
File file = new File("\"file:///android_asset/regola11_1.pdf");
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
context.startActivity(intent);
}
catch (ActivityNotFoundException e) {
Toast.makeText(context, "No application available to view PDF", Toast.LENGTH_LONG).show();
}
break;
}
case R.id.bD2:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 2 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD3:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 3 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD4:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 4 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD5:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 5 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD6:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 6 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD7:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 7 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD8:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 8 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD9:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 9 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD10:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 10 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD11:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 11 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD12:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 12 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD13:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 13 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD14:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 14 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD15:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 15 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD16:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 16 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
case R.id.bD17:
{
Toast.makeText(getActivity(), "Hai cliccato Regola 17 in Reg11 ", Toast.LENGTH_SHORT).show();
break;
}
}
}
}
qualcuno può aiutarmi?
EDIT 2
ho trovato la soluzione, controllare la mia risposta qui sotto per il codice.
Grazie a tutti per le vostre risposte.
Ci dispiace, ma io sono un principiante, e non so come usare https: // github.com/commonsguy/cwac-provider. Puoi gentilmente darmi istruzioni passo-passo? –
@AndreyVedishchev: Se sei un principiante, ti consiglio di andare con il terzo punto nella mia risposta. – CommonsWare
Ok ma come si fa? –