Windows 10 KB3116908 0x80070570
これは、パソコンのWindows 10 のシステム更新に関する情報です。
x64 ベース システム用 Windows 10 バージョン 1511 の累積的な更新プログラム (KB3116908)
に関する更新をしようとすると、
エラーコード:(0x80070570)
が発生します。これに関する回答は次のサイトにあります。
Error code: (0x80070570) - When trying to download Win10 pro cumulative (KB3116908)
パソコンの"C:\Windows\SoftwareDistribution\Download"にあるフォルダーやファイルを全て削除すれば、上記エラーは無くなり、更新ができます。
2015年12月6日日曜日
2015年11月19日木曜日
.InstantiationException
InstantiationException
E/AndroidRuntime: Caused by: java.lang.InstantiationException: java.lang.Class<xxxx.xxxx.xxxx> cannot be instantiated
上記のエラーが出ました。原因は、下記のように、abstractが付いてしまっていたためでした。これを消すと直りました。何かの拍子に自動的に付加されてしまったものです。
public abstract class MainActivity extends Activity
参考
java.lang.InstantiationException: can't instantiate class; no empty constructor
E/AndroidRuntime: Caused by: java.lang.InstantiationException: java.lang.Class<xxxx.xxxx.xxxx> cannot be instantiated
上記のエラーが出ました。原因は、下記のように、abstractが付いてしまっていたためでした。これを消すと直りました。何かの拍子に自動的に付加されてしまったものです。
public abstract class MainActivity extends Activity
参考
java.lang.InstantiationException: can't instantiate class; no empty constructor
2015年11月4日水曜日
Resources: Converting to string: TypedValue
Resources: Converting to string: TypedValue
W/Resources: Converting to string: TypedValue{t=0x12/d=0x0 a=1 r=0x1020351}
上記のような警告がLogに表示されることがあります。
この警告が不要であれば、Android端末の「設定」>「開発者向けオプション」>「表示属性検査を有効にする」のチェックを外してください。
W/Resources: Converting to string: TypedValue{t=0x12/d=0x0 a=1 r=0x1020351}
上記のような警告がLogに表示されることがあります。
この警告が不要であれば、Android端末の「設定」>「開発者向けオプション」>「表示属性検査を有効にする」のチェックを外してください。
2015年11月3日火曜日
MiniThumbFile: Unable to create .thumbnails directory
MiniThumbFile: Unable to create .thumbnails directory
Android 6.0で上記エラーが発生しました。
AndroidManifest.xmlファイルに下記のとおり追記すると解決しました。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Android 6.0で上記エラーが発生しました。
AndroidManifest.xmlファイルに下記のとおり追記すると解決しました。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
参考
2015年10月25日日曜日
Requesting Permissions at Run Time
Requesting Permissions at Run Time
AndroidのエミュレーターをAndroid 6.0 (API level 23、Marshmallow)にすると、mkdir()が動作しなくなった。
また、次のようなエラーも出るようになった。
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/video/media from pid=2627, uid=10058 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
これは次の事情による。
Android 6.0 Changes > Runtime Permissions
Requesting Permissions at Run Time
この問題をとりあえず解決するには、そのエミュレータ(端末)の「設定」>アプリ>(開発中のアプリを選択)>Permissionsを選択し、必要とするpermissionにチェックを入れればよろしい。
でも、その程度で解決する話ではないんだよね。
6.0では実行時に、permissionの許諾を端末利用者から得ることになる。インストール時ではない。
6.0からは、従前のpermissionに対し、上位概念のpermissionが設けられた。
従前のpermisssionは、例えば、ファイル操作関係であれば次のようなものだ。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
AndroidManifest.xmlファイルにある、お馴染みさんである。
これに対して、6.0では、上位概念のpermissionとして、例えば、「STORAGE」が設けられた。
STORAGEは、下位に、READ_EXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGEの2個のpermissionを含んでいる。
この上位-下位の関係性はSystem Permissionsの表に掲示されている。上位概念は「Permission Group」という用語で説明されている。
上述の操作「設定」>アプリ>(開発中のアプリを選択)>Permissionsにおいて表示される文字列(コマンド)は、この上位概念のpermissionである。このpermissionに許可を与えれば、READ_EXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGEの2個の許可を与えたことになる(アプリが、それらを使うのであれば)。
Javaのプログラミング上では、上述の「上位概念」(Permission Group)は登場しないし、書く必要はない。引き続き、従前のpermission用語を使えば良い。
1個の下位概念のpermissionの使用に対して端末利用者の許諾を得たのであれば、その上位概念の許諾を得たことになるので、配下の他の下位概念で許諾を得る必要はない。
上位概念単位で端末利用者に許可を得ることになっている。
どのpermissionで対応すべきかは、上記のように、エラーメッセージの中に記されている。
AndroidのエミュレーターをAndroid 6.0 (API level 23、Marshmallow)にすると、mkdir()が動作しなくなった。
また、次のようなエラーも出るようになった。
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/video/media from pid=2627, uid=10058 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
Android 6.0 Changes > Runtime Permissions
Requesting Permissions at Run Time
この問題をとりあえず解決するには、そのエミュレータ(端末)の「設定」>アプリ>(開発中のアプリを選択)>Permissionsを選択し、必要とするpermissionにチェックを入れればよろしい。
でも、その程度で解決する話ではないんだよね。
6.0では実行時に、permissionの許諾を端末利用者から得ることになる。インストール時ではない。
6.0からは、従前のpermissionに対し、上位概念のpermissionが設けられた。
従前のpermisssionは、例えば、ファイル操作関係であれば次のようなものだ。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
AndroidManifest.xmlファイルにある、お馴染みさんである。
これに対して、6.0では、上位概念のpermissionとして、例えば、「STORAGE」が設けられた。
STORAGEは、下位に、READ_EXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGEの2個のpermissionを含んでいる。
この上位-下位の関係性はSystem Permissionsの表に掲示されている。上位概念は「Permission Group」という用語で説明されている。
上述の操作「設定」>アプリ>(開発中のアプリを選択)>Permissionsにおいて表示される文字列(コマンド)は、この上位概念のpermissionである。このpermissionに許可を与えれば、READ_EXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGEの2個の許可を与えたことになる(アプリが、それらを使うのであれば)。
Javaのプログラミング上では、上述の「上位概念」(Permission Group)は登場しないし、書く必要はない。引き続き、従前のpermission用語を使えば良い。
1個の下位概念のpermissionの使用に対して端末利用者の許諾を得たのであれば、その上位概念の許諾を得たことになるので、配下の他の下位概念で許諾を得る必要はない。
上位概念単位で端末利用者に許可を得ることになっている。
どのpermissionで対応すべきかは、上記のように、エラーメッセージの中に記されている。
端末利用者に許諾を得るタイミングは、permissionに関するメソッドを使用する前であれば、いつでも良い。一般的には、onCreate()において実施することになるのであろう。
留意すべきは、これは「許諾を得る」という次元の話である。
プログラムの実行時の制約は、下位概念のpermission毎に個別に異なる。例えば、readだけを使って上位概念の許諾を得ていた場合、writeの実行はできない。この場合、writeの実行時には地味なエラーになる。一旦許諾を得てしまえば、上記のような親切なエラーメッセージは何も表示されないので、何故エラーなのか悩むかもしれない。
readができるように許諾を得た後で、こそっと、その許諾に関するコードをwriteに変更したとしても、許諾関連には何も影響はない。そして、writeを実行できるようになる。
留意すべきは、これは「許諾を得る」という次元の話である。
プログラムの実行時の制約は、下位概念のpermission毎に個別に異なる。例えば、readだけを使って上位概念の許諾を得ていた場合、writeの実行はできない。この場合、writeの実行時には地味なエラーになる。一旦許諾を得てしまえば、上記のような親切なエラーメッセージは何も表示されないので、何故エラーなのか悩むかもしれない。
readができるように許諾を得た後で、こそっと、その許諾に関するコードをwriteに変更したとしても、許諾関連には何も影響はない。そして、writeを実行できるようになる。
Javaのコードは、教科書Requesting Permissions at Run Timeに書かれてあるとおりである。
なお、build.gradleファイルには次のとおり追加する。
dependencies {
compile 'com.android.support:support-v4:23.1.0'
}
/*
onCreate()から呼ばれる。
*/
private boolean MyCheckPermission(){
if(BuildConfig.DEBUG) Log.d(TAG, "MyCheckPermission()");
int i;
i = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
if(i==PackageManager.PERMISSION_GRANTED){//既に許諾を得ている場合。
//Android 6.0未満の場合、自動的にここに来る。バージョンによる振り分けをする必要はない。
if(BuildConfig.DEBUG) Log.d(TAG, "MyCheckPermission() checkSelfPermission() is GRANTED");
return true;//起動に必要な残りの処理を実行する。
}
//一度許諾を与えると、2度と、下記処理を行わない。
else{//まだ許諾を得ていない場合
boolean b;
b = ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE);
if(b){//いきなり設定画面を表示するのではなく、permissionの必要性を(開発者の言葉で)説明する画面を表示する(任意)。
//普通は、ここに来る。
if(BuildConfig.DEBUG) Log.d(TAG, "MyCheckPermission() shouldShowRequestPermissionRationale is true");
Intent it = new Intent(MainActivity.this, PermissionActivity.class);
startActivityForResult(it, Nippon.ID_REQUEST_READ_EXTERNAL_STORAGE);
}
else{
if(BuildConfig.DEBUG) Log.d(TAG, "MyCheckPermission() shouldShowRequestPermissionRationale is false");
/*
端末利用者が「二度とこの質問をしない」というチェックボックスにチェックしている場合、ここに来る。
下記を実行することにより、過去の回答を自動で読み取る。画面に質問用画面を表示しない。
また、アンインストールをした後、再度インストールをした場合も、ここに来る。この場合、画面に質問用画面を表示する。
*/ ActivityCompat.requestPermissions( this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, Nippon.ID_REQUEST_READ_EXTERNAL_STORAGE ); } return false;//処理を、一旦、中断する。 } }
@Override
protected void onActivityResult(int iRequest, int iResult, Intent it){
if(BuildConfig.DEBUG) Log.d(TAG, "onActivityResult()");
switch(iRequest){
case Nippon.ID_REQUEST_READ_EXTERNAL_STORAGE:
if(iResult==RESULT_OK){
/*
下記を実行するとAndroidシステム御用達の画面が表示され、READ_EXTERNAL_STORAGEを許可しますか? という趣旨の文言で聞かれる。
端末利用者の選択結果はonRequestPermissionsResult()で受け取る。
端末利用者が「二度とこの質問をしない」というチェックボックスにチェックすると、「拒否」しか選択できない表示になる(「承諾」を選択できない)
アプリの運用途中で「拒否」&「2度と質問しない」をしてしまい、かつ、やっぱり気が変わって使いたいって思った場合、
端末利用者は、手動で設定を変更しなければならない。
*/
ActivityCompat.requestPermissions(
this,
//一度に、複数のpermissionを設定できるようにするため、配列形式になっている。
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
Nippon.ID_REQUEST_READ_EXTERNAL_STORAGE
);
}
else finish();//「戻る」キーで戻った場合
break;
}
super.onActivityResult(iRequest, iResult, it);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case Nippon.ID_REQUEST_READ_EXTERNAL_STORAGE:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
continue_onCreate();
}
else finish();
}
}
2015年10月10日土曜日
google.android.gms.ads.AdActivity
google.android.gms.ads.AdActivity
google.android.gms.ads.AdActivityを使用しない場合(Admobの広告を使用しない場合)であっても、
\app\build\intermediates\manifests\full\debug\AndroidManifest.xmlファイルの下方には、次のように自動的に記載される。何故このような仕様にしているのかは問わない。
<!-- Include the AdActivity and InAppPurchaseActivity configChanges and themes. -->
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
<activity
android:name="com.google.android.gms.ads.purchase.InAppPurchaseActivity"
android:theme="@style/Theme.IAPTheme" />
google.android.gms.ads.AdActivityを使用しない場合(Admobの広告を使用しない場合)であっても、
\app\build\intermediates\manifests\full\debug\AndroidManifest.xmlファイルの下方には、次のように自動的に記載される。何故このような仕様にしているのかは問わない。
<!-- Include the AdActivity and InAppPurchaseActivity configChanges and themes. -->
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
<activity
android:name="com.google.android.gms.ads.purchase.InAppPurchaseActivity"
android:theme="@style/Theme.IAPTheme" />
普段は人畜無害なので冬眠中の虫のようなものだ。
しかし、この記述内のandroid:configChangesの記載にエラーがあるという趣旨で、Build>Rebuild Projectの時、及びGenerate Signed APK...の時にエラーが発生した、
止むを得ないので、gms系のを全部削除した。
すると、新たなエラーが発生した。
gms系のエラーは真の原因では無く、闇の大ボスがいるようである。むむむ!
そこで、Proguardの設定ファイル内に次の行を書き込んでみた。
Androidのプログラミングの難易度は結構高めです。
すると、新たなエラーが発生した。
gms系のエラーは真の原因では無く、闇の大ボスがいるようである。むむむ!
そこで、Proguardの設定ファイル内に次の行を書き込んでみた。
-dontwarn com.google.android.gms.**
すると、闇の大ボスは出なくなった。
gmsを使ってないのに!!!
Androidのプログラミングの難易度は結構高めです。
2015年9月6日日曜日
動画を連続再生させるアプリ
動画を連続再生させるアプリ
動画を連続再生させるアプリ「動画ん君」を開発・公開しました。
アプリ起動時に、自動的に、再生リストに基づき、動画の再生を開始できます。
お気軽にお使いください。
https://play.google.com/store/apps/details?id=jp.androyer.playmp4
動画を連続再生させるアプリ「動画ん君」を開発・公開しました。
アプリ起動時に、自動的に、再生リストに基づき、動画の再生を開始できます。
お気軽にお使いください。
https://play.google.com/store/apps/details?id=jp.androyer.playmp4
登録:
投稿 (Atom)