したがって、私のアプリには、ActionDialog
単純なキャンセル ボタンと保存ボタンを備えたインターフェイスとして空白のキャンバスを含む があります。起こっていることは、簡単な図で最もよく示されています
以前の画面構成
-(TextView)-(ImageView)-(Button)-
次に、ユーザーがボタンを押すと、ActionDialog
署名を要求するポップアップが表示されます。彼らが署名すると、キャプチャされた図面が保存されます。次に、メモリを介して図面にアクセスし、元の場所ImageView
にbitmap
. しかし、これは結局起こることです
変更後の画面構成
- - - - - なし - - - - - - -
それらは消えてしまい、私の中にエラーが表示されますlogcat
:
05-14 19:06:27.004: E/Error(25274): java.io.FileNotFoundException: /storage/emulated/0signature.png: open failed: EACCES (Permission denied)
05-14 19:06:27.004: E/BitmapFactory(25274): Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0signature.png: open failed: ENOENT (No such file or directory)
java.io.FileNotFoundException: /storage/emulated/0signature.png: オープンに失敗しました: ENOENT (そのようなファイルまたはディレクトリはありません)
ただし、プログラムがクラッシュすることはありません。とにかく、ここにファイルのコードがあります
アクションダイアログ
public class CaptureSignature extends DialogFragment {
Sign sign;
View view;
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder capSig = new AlertDialog.Builder(getActivity());
capSig.setView(sign = new Sign(this.getActivity(), null))
.setMessage(R.string.store_question)
.setPositiveButton(R.string.save,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
try {
sign.setDrawingCacheEnabled(true);
sign.getDrawingCache()
.compress(
Bitmap.CompressFormat.PNG,
10,
new FileOutputStream(
new File(
getActivity()
.getExternalFilesDir(
"img"),
"signature.png")));
} catch (Exception e) {
Log.e("Error ", e.toString());
}
File mysig = new File(getActivity()
.getExternalFilesDir("img"),
"signature.png");
ImageView sig = (ImageView) getActivity()
.findViewById(R.id.sig_image);
Bitmap bmp = BitmapFactory.decodeFile(mysig
.getAbsolutePath());
sig.setImageBitmap(bmp);
}
})
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
// Create the Dialog object and return it
return capSig.create();
}
}
だから明らかに私はこれをどこかで台無しにしました。誰かが何か洞察を持っているなら、私は感謝します。ありがとう!
個人的には、これを間違って保存しているか、Sign を正しく宣言していないかのどちらかだと思いdrawing cache
ます。
編集
私はこれを宣言しましたManifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2回目の編集
新しいコードと logcat を表示し、エラーが変更されました
最終編集
Matt Giles と JRowan に感謝します。これには気が狂いそうになりました。現在は動作しており、上記のコードは最終バージョンです。