Simpan file ke penyimpanan internal secara pribadi

Saya ingin menyimpan file ke penyimpanan internal saya secara pribadi sehingga hanya aplikasi saya yang dapat mengaksesnya. Menurut situs pengembang Android, secara default, file yang disimpan ke penyimpanan internal bersifat pribadi untuk aplikasi Anda dan aplikasi lain tidak dapat mengakses mereka (pengguna juga tidak bisa). Namun ketika saya menyimpan file saya menggunakan Environment.getExternalStorageDirectory(); file tersebut jelas dapat diakses oleh siapa saja. Saya telah mencoba menggunakan getFilesDir() karena tampaknya ini menjadikan file Anda pribadi tetapi aplikasi saya terus mogok. Di bawah ini adalah kode saya:

public class SaveOpen extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_save_open);
        isSDCardAvailable();


        Button david = (Button) findViewById(R.id.button1);
        david.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                File pdfFile = new File(getFilesDir().getAbsolutePath() + "/MathBarsPDFDocumentTestNew/userg.pdf");
                Uri path = Uri.fromFile(pdfFile);
                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) {
                    // No application to view, ask to download one
                    AlertDialog.Builder builder = new AlertDialog.Builder(
                            SaveOpen.this);
                    builder.setTitle("No Application Found");
                    builder.setMessage("Download one from Android Market?");
                    builder.setPositiveButton("Yes, Please",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    Intent marketIntent = new Intent(Intent.ACTION_VIEW);
                                    marketIntent.setData(Uri
                                            .parse("market://details?id=com.adobe.reader"));
                                    startActivity(marketIntent);
                                }
                            });
                    builder.setNegativeButton("No, Thanks", null);
                    builder.create().show();
                }

            }
        });



    }


    public void isSDCardAvailable(){


        String state = Environment.getExternalStorageState();

        if (Environment.MEDIA_MOUNTED.toString().equals(state.toString())) {

            //File sdDir = Environment.getExternalStorageDirectory();
            File sdDir = getFilesDir();



            File newdir = new File(sdDir.getAbsolutePath() + "/MathBarsPDFDocumentTestNew");
            newdir.mkdirs();
            File file = new File(newdir, "userg.pdf");

            try {

                FileOutputStream f = new FileOutputStream(file);
                AssetManager assetManager = getAssets();
                InputStream input = assetManager.open("userguide.pdf");

                byte[] buffer = new byte[1024];
                int read;
                while ((read = input.read(buffer)) != -1) {
                    f.write(buffer, 0, read);
                }
                f.close();
                input.close();

            } catch (Exception e) {
                Log.d("Downloader", e.getMessage());
            }





        }else{



            AlertDialog.Builder builder = new AlertDialog.Builder(
                    SaveOpen.this);
            builder.setTitle("No SD Card available");
            builder.setMessage("Please Insert SD Card");

            builder.setNegativeButton("Cancel", null);
            builder.create().show();
        }



        }

    }

Ada saran? Di bawah ini adalah log kucing saya:

03-05 11:02:19.520: I/ActivityManager(164): START {act=android.intent.action.VIEW dat=file:///data/data/com.david.openpdf/files/MathBarsPDFDocumentTestNew/userg.pdf typ=application/pdf flg=0x4000000 cmp=com.adobe.reader/.AdobeReader} from pid 2684
03-05 11:02:19.570: I/ActivityManager(164): START {cmp=com.adobe.reader/.ARViewer (has extras)} from pid 2697
03-05 11:02:19.620: I/ActivityManager(164): Displayed com.adobe.reader/.AdobeReader: +77ms
03-05 11:02:19.660: D/OpenGLRenderer(2684): Flushing caches (mode 0)
03-05 11:02:19.680: V/TabletStatusBar(243): setLightsOn(true)
03-05 11:02:19.700: D/OpenGLRenderer(2684): Flushing caches (mode 1)


03-05 11:02:35.630: E/System(2697): Uncaught exception thrown by finalizer
03-05 11:02:35.630: E/System(2697): java.lang.NullPointerException
03-05 11:02:35.630: E/System(2697):     at com.omniture.AppMeasurementBaseSE13.finalize(AppMeasurementBaseSE13.java:43)
03-05 11:02:35.630: E/System(2697):     at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:182)
03-05 11:02:35.630: E/System(2697):     at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168)
03-05 11:02:35.630: E/System(2697):     at java.lang.Thread.run(Thread.java:856)
03-05 11:02:35.660: D/dalvikvm(164): GC_CONCURRENT freed 1044K, 26% free 11680K/15751K, paused 2ms+5ms
03-05 11:02:44.640: I/wpa_supplicant(229): wlan0: WPA: Group rekeying completed with 00:1c:b3:ae:95:09 [GTK=CCMP]

Dan di layar saya tertulis Error: The document path is not valid


person DMC    schedule 05.03.2013    source sumber
comment
getFilesDir() adalah cara yang tepat untuk Anda, harap kirimkan logcat kepada Anda saat crash   -  person Emil Adz    schedule 05.03.2013


Jawaban (1)


Nah, jika Anda ingin menghemat penyimpanan internal, Anda tidak perlu menggunakan Environment.getExternalStorageDirectory() tetapi Anda harus menggunakan getFilesDir() (Mengembalikan File yang mewakili direktori internal untuk aplikasi Anda).

Lihat dokumen resmi Android mengenai subjek dan semuanya cukup jelas.

person Lisa Anne    schedule 05.03.2013
comment
Jika Anda melihat kode saya di atas, Anda dapat melihat bahwa saya memang menggunakan getFilesDir() namun hal itu menyebabkan aplikasi saya mogok. - person DMC; 05.03.2013
comment
@ cv82 Begitu, silakan posting LogCat Anda, mari kita lihat di mana masalahnya - person Lisa Anne; 05.03.2013
comment
Saya telah menambahkan logcat saya di atas - person DMC; 05.03.2013
comment
@ cv82 sejauh ini tidak ada masalah... mencoba melakukan debug...silakan kirimkan kode aktivitas lainnya - person Lisa Anne; 05.03.2013
comment
Ini adalah satu-satunya aktivitas yang saya miliki di aplikasi saya - person DMC; 05.03.2013
comment
@ cv82 Anda benar. Saya harap Anda mengujinya di ponsel sungguhan (bukan Emulator), dan Anda memasang pembaca pdf di ponsel Anda... - person Lisa Anne; 05.03.2013
comment
Ya, saya sedang mengujinya di tablet dan saya sudah menginstal adobe reader - person DMC; 05.03.2013
comment
@ cv82 baiklah, saya tidak punya... Saya hanya dapat membantu Anda sejauh ini. Lagi pula, jika Anda menghargai jawaban saya, Anda dapat memberi saya reputasi dengan mengklik panah oranye di sebelah kiri jawaban. Terima kasih dan semoga sukses dengan pekerjaan Anda!!! maurizio - person Lisa Anne; 05.03.2013