Android 4.X에서 7.X에 이르는 대부분의 휴대 전화에서 잘 작동하는 앱을 출시했습니다. 하지만 HTC One M9 (6.0 Marshmallow)라는 장치가 하나씩 있으며 앱이 매번 충돌합니다. 메인 메뉴가로드되고 앱이 Google 게임 서비스에 연결하려고하면 항상 발생합니다. 솔직히 오류 로그를 얻지 못했습니다. 이것은 내가 무엇을 얻을 수 있습니다 :java.lang.IllegalStateException : HTC Android 6.0 Marshmallow crash - Google Play 스냅 샷
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: Must provide a valid file name!
at android.os.Parcel.readException(Parcel.java:1616)
at android.os.Parcel.readException(Parcel.java:1561)
at com.google.android.gms.games.internal.IGamesService$Stub$Proxy.zza(Unknown Source)
at com.google.android.gms.games.internal.GamesClientImpl.zza(Unknown Source)
at com.google.android.gms.games.internal.api.SnapshotsImpl$2.zza(Unknown Source)
at com.google.android.gms.games.internal.api.SnapshotsImpl$2.zza(Unknown Source)
at com.google.android.gms.internal.zzaad$zza.zzb(Unknown Source)
at com.google.android.gms.internal.zzaaq.zze(Unknown Source)
at com.google.android.gms.internal.zzaaq.zzb(Unknown Source)
at com.google.android.gms.internal.zzaav.zzb(Unknown Source)
at com.google.android.gms.internal.zzaat.zzb(Unknown Source)
at com.google.android.gms.games.internal.api.SnapshotsImpl.open(Unknown Source)
at com.google.android.gms.games.internal.api.SnapshotsImpl.open(Unknown Source)
at com.duke.privatpc.quiztest.MainActivity$2.doInBackground(MainActivity.java:362)
at com.duke.privatpc.quiztest.MainActivity$2.doInBackground(MainActivity.java:357)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4 more
또한, ("열 Snapshots.OpenSnapshotResult"여기) 이러한 방법에서 내 MainActivity.java를 참조 로그의 두 줄 :
private void savedGamesUpdate() {
final String snapshotName = makeSnapshotName(APP_STATE_KEY);
final boolean createIfMissing = true;
// Use the data from the EditText as the new Snapshot data.
final byte[] data = mSaveGameData;
AsyncTask<Void, Void, Boolean> updateTask = new AsyncTask<Void, Void, Boolean>() {
@Override
protected Boolean doInBackground(Void... params) {
Snapshots.OpenSnapshotResult open = Games.Snapshots.open(
mGoogleApiClient, snapshotName, createIfMissing).await();
if (!open.getStatus().isSuccess()) {
return false;
}
Bitmap coverImage = BitmapFactory.decodeResource(MainActivity.this.getResources(),
R.mipmap.autosave);
String desc = "Autosave "+android.os.Build.MODEL;
// Create the change operation
SnapshotMetadataChange metadataChange = new SnapshotMetadataChange.Builder()
.setCoverImage(coverImage)
.setDescription(desc)
.build();
// Change data but leave existing metadata
Snapshot snapshot = open.getSnapshot();
snapshot.getSnapshotContents().writeBytes(data);
Snapshots.CommitSnapshotResult commit = Games.Snapshots.commitAndClose(
mGoogleApiClient, snapshot, metadataChange).await();
if (!commit.getStatus().isSuccess()) {
return false;
}
// No failures
return true;
}
@Override
protected void onPostExecute(Boolean result) {
dismissProgressDialog();
}
};
updateTask.execute();
}
이 하나 :
private String makeSnapshotName(int appStateKey) {
if(isAnHTCDevice()){
return "Autosave HTC";
}else{
if(android.os.Build.MODEL != null){
return "Autosave"+android.os.Build.MODEL;
}else{
return "Autosave";
}
}
}
public boolean isAnHTCDevice()
{
String manufacturer = android.os.Build.MANUFACTURER;
if (manufacturer.toLowerCase().contains("htc"))
return true;
else
return false;
}
누구나이 문제의 원인을 알 수 있습니까?
내가 잘못한 부분을 설명 할 수 있습니까? 이러한 요구 사항을 충족하지 않는 스냅 샷 이름을 어디서 만들지는 모르겠습니까? 또는 "Autosave HTC"의 공간을 허용하지 않습니까? –
@ DustinKeßler'Autosave HTC', 공백은 허용되지 않습니다. – jiashie
어떻게 "수동 세이브 포인트"라고 불리는 다른 곳에서 세이브 게임을 할 수 있습니까? –