小编por*_*der的帖子

拍摄带照相机意图的照片并在imageView或textView中显示?

我有一个关于如何使用相机意图(或相机API)拍摄图像的问题,然后将图像带入imageView,以便在我的应用程序中显示.这就是我到目前为止所拥有的.

我设置了一个按钮

Button btnPicture = (Button) findViewById(R.id.btn_picture);
    btnPicture.setOnClickListener(this);
Run Code Online (Sandbox Code Playgroud)

我设置了一个Camera方法

private void Camera() {
    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, TAKE_PICTURE_CODE);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, REQUEST_CODE);
}
Run Code Online (Sandbox Code Playgroud)

这就是我迷失的地方.我正在尝试处理我拍摄的图像.

    private void processImage(Intent intent) {
    setContentView(R.layout.imagelayout);
    ImageView imageView = (ImageView)findViewById(R.id.image_view);
    cameraBitmap = (Bitmap)intent.getExtras().get("data");
    imageView.setImageBitmap(cameraBitmap);
}
Run Code Online (Sandbox Code Playgroud)

我的目的是显示你在image_view中拍摄的图像.我没有收到错误,没有任何反应.当我拍照时,我被要求拍摄另一张照片,或者在我使用设备后退按钮后,应用程序强制关闭.似乎我完全退出了我的应用程序,返回是一个大问题.有什么建议?我错过了什么?

是的,这是我的onActivityResult

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
        if(TAKE_PICTURE_CODE == requestCode) {

        Bundle extras = data.getExtras();
        if (extras.containsKey("data")) {
            Bitmap bmp = (Bitmap) extras.get("data");
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
            byte[] …
Run Code Online (Sandbox Code Playgroud)

android android-camera android-imageview

8
推荐指数
1
解决办法
2万
查看次数

如何静音SpeechRecognizer的哔声?

之前已经问过,但似乎没有人有解决方案:将SpeechRecognizer的哔声静音

不过,我仍然想知道是否有人知道如何静音SpeechRecognizer的哔哔声?

我创建了speechRecognizer对象:private SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer (this);

然后在我的课堂上我像这样实例化speechRecognizer

sr.setRecognitionListener(new listener());
Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);             
i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication()
        .getClass().getName());
i.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 6);
i.putExtra(RecognizerIntent.EXTRA_PROMPT, "");
i.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 7000);
sr.startListening(i);
Run Code Online (Sandbox Code Playgroud)

任何有好主意的人?我研究过我可以创建AudioManager(AudioManager mAudioManager)的对象,然后使用setStreamSolo(),我可以静音.但我不确定如何实现这一点.我将它添加到我的speechRecognizer实例化代码中,没有任何反应.这是我应该从我的主课那里打电话的吗?

mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);
Run Code Online (Sandbox Code Playgroud)

先感谢您.

audio android voice-recognition

7
推荐指数
1
解决办法
1万
查看次数

当应用从后台返回时,省电模式不会导致网络连接

我使用观察者模式来监视网络连接何时发生变化.我遇到的问题是,如果在任何设备上启用了省电模式,则在检查连接时,从后台返回到我的应用程序的前台将立即触发"无网络".由于观察者模式的性质,此更改将显示我的无连接对话框,即使毫秒后恢复连接.

从后台返回应用程序时连接信号仍然很强,但出于某种原因,省电模式会让系统认为没有连接.我该如何控制?如果省电模式处于活动状态,是否有某种方法可以忽略检查连接?

这是我的网络观察者类.我在我的应用程序中注册接收器,并利用应用程序的活动生命周期来确定何时应该监听网络中的更改以及何时不应该.提前致谢!

public class NetworkReceiver extends BroadcastReceiver {
    private static final String TAG = NetworkReceiver.class.getSimpleName();

    private static final List<NetworkStatusObserver> mObserverList = new ArrayList<>();
    private static boolean isNetworkConnected = true;

    @Override
    public void onReceive(Context context, Intent intent) {
        Logger.i(TAG, "onReceive() broadcast");
        boolean disconnected = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
        boolean isNetworkConnectedCurrent;

        if (disconnected) {
            isNetworkConnectedCurrent = false;
        } else {
            NetworkInfo networkInfo;

            if (Build.VERSION.SDK_INT < 17) {
                networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            } else {
                ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                networkInfo = cm.getActiveNetworkInfo();
            }

            isNetworkConnectedCurrent …
Run Code Online (Sandbox Code Playgroud)

networking android broadcastreceiver

7
推荐指数
0
解决办法
589
查看次数

深层链接导致应用程序的多个实例打开

这个问题已经在类似的帖子中解决过,但是,我的情况有点不同。我只有一项活动和多个片段。我没有深入链接到特定的片段,我正在启动我的一项活动,然后重定向到不同的片段。我遇到的问题是,单击深层链接时会打开应用程序的多个实例,并且当阻止应用程序的多个实例打开时,我会丢失深层链接意图中的数据。

我已经通过几种方式阻止了多个实例。一种是将 singleTop 添加到我的清单中

android:launchMode="singleTop"
Run Code Online (Sandbox Code Playgroud)

这可以防止多个实例,但是,原始应用程序实例中的静态数据会丢失。另一种方法我也尝试过以下方法

   // finishes activity if its not the root activity
    if (!FrameworkUtils.checkIfNull(getIntent().getExtras())) {
        if (!isTaskRoot()) {
            finish();
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用此代码,我维护应用程序的原始实例,但我需要的深层链接的意图数据消失了,因为应用程序的新实例(我需要)被关闭。

如何解决这种情况,而无需创建额外的活动来启动,然后执行类似的操作

    Intent intent = getIntent();
    String intentUrl = intent.getDataString();
    Intent newIntent = new Intent(this, MainActivity.class);
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    newIntent.putExtra("intentUrl",intentUrl);
    newIntent.setAction(Long.toString(System.currentTimeMillis()));
    startActivity(newIntent);
    finish();
Run Code Online (Sandbox Code Playgroud)

或者更确切地说,如何在用户单击深层链接后删除应用程序的原始实例并保留应用程序的新实例?提前致谢

android deep-linking android-intent

7
推荐指数
1
解决办法
9406
查看次数

如何知道三星S8,S8 +,S9等ect底部导航栏是否可见?

三星S8,S8 +,S9等的底部导航栏会导致UI和动画噩梦,以便在切换时从我的应用程序的顶部和底部移入和移出视图.对于这些设备,如果导航栏切换到一切都可以正常工作,但如果切换动画,则所有设置都会大约低于导航栏的高度.我的想法是调整动画,但是,我很难搞清楚手机有一个底部导航栏并且它被切换掉了.

我创建了一个帮助方法,它让我知道一个设备有一个切换的导航栏.对于具有导航栏并且已打开的所有设备,此函数将返回true.但我想要处理的情况是它被切换掉的时候.问题是,切换掉就像所有其他手机一样.怎么解决这个?有没有办法强制导航栏永久显示?

   public static boolean hasNavBar(@NonNull Activity activity, @NonNull View rootView) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return true;
        }

        // retrieve the window manager for showing custom windows
        Display d = activity.getWindowManager().getDefaultDisplay();
        DisplayMetrics realDisplayMetrics = new DisplayMetrics();
        d.getRealMetrics(realDisplayMetrics);

        int viewHeight = rootView.getHeight();
        if (viewHeight == 0) {
            return true;
        }
        int realHeight = realDisplayMetrics.heightPixels;
        return realHeight != viewHeight;
    }
Run Code Online (Sandbox Code Playgroud)

android bottomnavigationview

7
推荐指数
0
解决办法
250
查看次数

如何在不使用面具的情况下创建拼图游戏?

我正在尝试创建一个拼图益智游戏,我想知道在不使用面具的情况下创建拼图的替代方法.目前我通过拍摄完整的图像拼图碎片,将图像分成四个部分(假设拼图是2x2),然后存储并对每个部分应用遮罩.它看起来像下面

    // create standard puzzle pieces
    arryPieceEndPos = new int[mCols][mRows];
    arryPieceImg = new Bitmap[mCols * mRows];
    arryIsPieceLocked = new boolean[mCols * mRows];

    int pos = 0;
    for (int c = 0; c < mCols; c++) {
        for (int r = 0; r < mRows; r++) {
            arryPieceImg[pos] = Bitmap.createBitmap(mBitmap,
            c * mPieceWidth, r * mPieceHeight,
            mPieceWidth, mPieceHeight);

            arryIsPieceLocked[pos] = false;
            arryPieceEndPos[c][r] = pos;
            pos++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我使用辅助方法将遮罩应用于每个部分

private Bitmap maskMethod(Bitmap bmpOriginal, Bitmap bmpMask) {

    // adjust mask bitmap if size …
Run Code Online (Sandbox Code Playgroud)

android bitmap image-processing

6
推荐指数
1
解决办法
2390
查看次数

显示动画说话字符的标准方式:Android

我有一个普遍的问题。我想知道显示动画说话角色的标准方式?动画只是嘴巴在动。

我最初的想法是使用 GIF。Android 可以使用 android.graphics.Movie 类解码和显示动画 GIF。似乎运作良好,并控制资源。

但是其他人提到使用 AnimationSet,我可以在其中使用 addAnimation() 将动画添加到动画集​​,然后启动动画,这将一次加载所有动画。这似乎更难,但他提到这是制作动画的行业标准方式。

我只是想确认一下。什么是最好的方法?我知道的第三种选择是使用视频。但是如果我必须在视频和简单的 GIF 之间进行选择,我想我会选择 GIF,因为大小不同。

对此有任何意见吗?提前致谢。

animation android animated-gif

5
推荐指数
1
解决办法
1585
查看次数

如何调出设置的默认启动器提示?

我想检测我的启动器应用程序是否是默认启动器,如果没有提示让用户选择我的应用程序作为默认启动器.我面临的问题是提示出现时没有"Just Once"和"Always"选项.此外,在我的启动器应用程序上选择不会设置默认值.

在我的onCreate中,我有以下检查以查看我的应用程序是否是默认启动器,然后我启动了一个有意图的对话框,以便用户可以选择我的应用程序作为默认启动器.

    if (!isMyAppLauncherDefault()) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        startActivity(Intent.createChooser(intent, "Set as default to enable Kiosk Mode"));
    }
Run Code Online (Sandbox Code Playgroud)

这是我检查我的应用程序是否是默认启动器的方法

private boolean isMyAppLauncherDefault() {
    final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
    filter.addCategory(Intent.CATEGORY_HOME);

    List<IntentFilter> filters = new ArrayList<IntentFilter>();
    filters.add(filter);

    final String myPackageName = getPackageName();
    List<ComponentName> activities = new ArrayList<ComponentName>();
    final PackageManager packageManager = (PackageManager) getPackageManager();

    // You can use name of your package here as third argument
    packageManager.getPreferredActivities(filters, activities, null);

    for (ComponentName activity : activities) {
        if (myPackageName.equals(activity.getPackageName())) …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-launcher

5
推荐指数
1
解决办法
2168
查看次数

Parse.com推送通知不能始终如一地接收"GCM -MISMATCH SENDER ID"错误

来自parse.com的推送通知并不一致.随机推送通知将失败,导致GCM - MISMATCH SENDER ID"错误.我的理解是,通过编程,我们不必对GCM执行任何操作,因为parse.com将objectId发送到GCM.在任何一种情况下,我都没有能够找出有时出现此错误的任何具体原因,有时则不会.此外,我使用的是Parse版本,1.10.2.

我的Application类具有以下内容

Parse.initialize(this, APPLICATION_ID_DEBUG, CLIENT_KEY_DEBUG);
            Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
ParsePush.subscribeInBackground(Constants.CHANNEL, new SaveCallback() {
            @Override
            public void done(ParseException e) {
                if (Utils.checkIfNull(e)) {
                    // subscribed to channel
                } else {
                    // failed to subscribe to channel
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

用户登录我的应用程序后,我将一个频道附加到他们.我保存的频道数据只是我从服务器获取的用户唯一ID.

        List<String> arryChannel = new ArrayList<>();
        arryChannel.add(uniqueUserId);

        final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
        parseInstallation.put(Constants.CHANNEL, arryChannel);
        parseInstallation.saveInBackground(new SaveCallback() {
            @Override
            public void done(ParseException e) {
                if (Utils.checkIfNull(e)) {
                    // update channel with user's unique id
                } else {
                    // failed to update channel …
Run Code Online (Sandbox Code Playgroud)

android push-notification parse-platform

5
推荐指数
1
解决办法
1196
查看次数

Activity.startLockTask() 从一个Activity到另一个Activity

我正在使用Activity.startLockTask()并注意到,如果我将屏幕固定在活动 A 中,我将无法转换到活动 B。似乎我必须在活动 B 上一次startLockTask()又一次stopLockTask()地转换。startLockTask()

有没有更好的方法来处理这个问题,以便我可以固定整个应用程序,无论我正在进行什么活动?

这就是我固定应用程序的方式:

// start lock task mode if it's not already active
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
// ActivityManager.getLockTaskModeState api is not available in pre-M
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
    if (!am.isInLockTaskMode()) {
        startLockTask();
    }
} else {
    if (am.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_NONE) {
        startLockTask();
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我停止固定的方式

stopLockTask()
Run Code Online (Sandbox Code Playgroud)

android kiosk android-screen-pinning

5
推荐指数
1
解决办法
3744
查看次数