Android:拍摄风景照片后的相机崩溃

时间:2017-03-27 11:21:40

标签: android android-camera android-orientation

我正在开发一个仅以纵向模式运行的Android应用程序。

在我的活动中,我有一个启动CameraActivity的按钮。

如果我以纵向模式拍摄照片,一切都按预期工作,活动恢复,照片设置在ImageView

但是如果我在横向模式下拍照,我会得到一张风景照片(没关系),但是我正在丢失上下文并且应用程序崩溃(仅限于像LG G4S这样的少数设备)。

据我所知,在此设备上,活动重新启动而不是恢复。有谁知道为什么这只发生在一些设备上?任何人都可以给我一个解决方案来解决这个问题吗?

  

java.lang.RuntimeException:无法启动活动   ComponentInfo {} app.CustomFormScreenActivity:   java.lang.NullPointerException:尝试调用虚方法   空对象上的'java.lang.String app.CustomFormSurvey.getParentId()'   参考

问题是在这个设备上拍照后,活动重新启动(而不是恢复)并且我丢失了Bundle(这就是应用程序抛出NullPointerException的原因)。

1 个答案:

答案 0 :(得分:0)

清单文件中的

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

    TextView tv = (TextView)findViewById(R.id.textview);

    if(Build.VERSION.SDK_INT == Build.VERSION_CODES.M){
        int permissionResult = checkSelfPermission(Manifest.permission.READ_PHONE_STATE);
        if(permissionResult == PackageManager.PERMISSION_DENIED){
            if(shouldShowRequestPermissionRationale(Manifest.permission.READ_PHONE_STATE)) {
                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setTitle("Need Permission")
                        .setMessage("This needs to READ_PHONE_STATE Permission. Continue?")
                        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                                    requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1000);
                                }
                            }
                        })
                        .setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_LONG).show();
                            }
                        })
                        .create()
                        .show();
            }
            else{
                requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1000);
            }
        }
        else{
            tv.setText(GetDeviceUUID(getBaseContext()));
        }
    }
    tv.setText(GetDeviceUUID(getBaseContext()));
}

public static String GetDeviceUUID(Context mContext){
    */
    TelephonyManager mgr = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
    final String ID = mgr.getDeviceId();
    return ID;
}

@Override
public Context getBaseContext() {
    return super.getBaseContext();
}

在您的活动代码下。 活动会在方向更改时重新创建,因此您需要手动处理它。