J'ai un petit problème où lorsque je clique sur un certain bouton de mon application, l'application se bloque complètement à chaque échec.
J'utilise Android Studio 2.3.3 et l'application est un scanner de code à barres, voici le message d'erreur que je reçois: strong> p> android.content.AcivivitéNotFoundException: Aucune activité trouvée à gérer
Intention {act = android.inTent.action.view dat = 5010029217902} P>
blockQuote> Voici la section du code qui cause l'erreur: p>
3 Réponses :
package com.example.priyanka.qrbarcodescanner;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import android.content.ClipboardManager;
import com.google.zxing.Result;
import me.dm7.barcodescanner.zxing.ZXingScannerView;
import static android.Manifest.permission.CAMERA;
public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
private static final int REQUEST_CAMERA = 1;
private ZXingScannerView scannerView;
private static int camId = Camera.CameraInfo.CAMERA_FACING_BACK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
scannerView = new ZXingScannerView(this);
setContentView(scannerView);
int currentApiVersion = Build.VERSION.SDK_INT;
if(currentApiVersion >= Build.VERSION_CODES.M)
{
if(checkPermission())
{
Toast.makeText(getApplicationContext(), "Permission already granted!", Toast.LENGTH_LONG).show();
}
else
{
requestPermission();
}
}
}
private boolean checkPermission()
{
return (ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA) == PackageManager.PERMISSION_GRANTED);
}
private void requestPermission()
{
ActivityCompat.requestPermissions(this, new String[]{CAMERA}, REQUEST_CAMERA);
}
@Override
public void onResume() {
super.onResume();
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.M) {
if (checkPermission()) {
if(scannerView == null) {
scannerView = new ZXingScannerView(this);
setContentView(scannerView);
}
scannerView.setResultHandler(this);
scannerView.startCamera();
} else {
requestPermission();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
scannerView.stopCamera();
}
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_CAMERA:
if (grantResults.length > 0) {
boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (cameraAccepted){
Toast.makeText(getApplicationContext(), "Permission Granted, Now you can access camera", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(getApplicationContext(), "Permission Denied, You cannot access and camera", Toast.LENGTH_LONG).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(CAMERA)) {
showMessageOKCancel("You need to allow access to both the permissions",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{CAMERA},
REQUEST_CAMERA);
}
}
});
return;
}
}
}
}
break;
}
}
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new android.support.v7.app.AlertDialog.Builder(MainActivity.this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
}
@Override
public void handleResult(Result result) {
Log.d("QRCodeScanner", result.getText());
Log.d("QRCodeScanner", result.getBarcodeFormat().toString());
final static String myResult = result.getText();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Scan Result");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
scannerView.resumeCameraPreview(MainActivity.this);
}
});
builder.setNeutralButton("Visit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(myResult));
startActivity(browserIntent);
}
});
builder.setMessage(result.getText());
AlertDialog alert1 = builder.create();
alert1.show();
}
}
package com.example.priyanka.qrbarcodescanner;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import android.content.ClipboardManager;
import com.google.zxing.Result;
import me.dm7.barcodescanner.zxing.ZXingScannerView;
import static android.Manifest.permission.CAMERA;
public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
private static String myResult;
private static final int REQUEST_CAMERA = 1;
private ZXingScannerView scannerView;
private static int camId = Camera.CameraInfo.CAMERA_FACING_BACK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
scannerView = new ZXingScannerView(this);
setContentView(scannerView);
int currentApiVersion = Build.VERSION.SDK_INT;
if(currentApiVersion >= Build.VERSION_CODES.M)
{
if(checkPermission())
{
Toast.makeText(getApplicationContext(), "Permission already granted!", Toast.LENGTH_LONG).show();
}
else
{
requestPermission();
}
}
}
private boolean checkPermission()
{
return (ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA) == PackageManager.PERMISSION_GRANTED);
}
private void requestPermission()
{
ActivityCompat.requestPermissions(this, new String[]{CAMERA}, REQUEST_CAMERA);
}
@Override
public void onResume() {
super.onResume();
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.M) {
if (checkPermission()) {
if(scannerView == null) {
scannerView = new ZXingScannerView(this);
setContentView(scannerView);
}
scannerView.setResultHandler(this);
scannerView.startCamera();
} else {
requestPermission();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
scannerView.stopCamera();
}
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_CAMERA:
if (grantResults.length > 0) {
boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (cameraAccepted){
Toast.makeText(getApplicationContext(), "Permission Granted, Now you can access camera", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(getApplicationContext(), "Permission Denied, You cannot access and camera", Toast.LENGTH_LONG).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(CAMERA)) {
showMessageOKCancel("You need to allow access to both the permissions",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{CAMERA},
REQUEST_CAMERA);
}
}
});
return;
}
}
}
}
break;
}
}
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new android.support.v7.app.AlertDialog.Builder(MainActivity.this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
}
@Override
public void handleResult(Result result) {
Log.d("QRCodeScanner", result.getText());
Log.d("QRCodeScanner", result.getBarcodeFormat().toString());
myResult = result.getText();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Scan Result");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
scannerView.resumeCameraPreview(MainActivity.this);
}
});
builder.setNeutralButton("Visit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(myResult));
startActivity(browserIntent);
}
});
builder.setMessage(result.getText());
AlertDialog alert1 = builder.create();
alert1.show();
}
}
Essayez de la copier en collant dans votre code. Si cela ne fonctionne pas, le problème n'est pas avec l'URI.
Hé, j'ai essayé de coller cela dans mon code et le "myResult = résultat.getext ();" me donne une erreur. Il dit: types incompatibles. Requis: String trouvée: java.lang.string
désolé, édité. Essayez-le maintenant.
Je pensais juste que je vous ferais savoir que le bouton "Visiter" fonctionne normalement si le code QR mène à une liaison d'URL telle que www.youtube.com, cependant si je numérise un code à barres qui renvoie un numéro de 13 chiffres comme valeur, Le programme se bloque lorsque je clique sur "Visiter". Est-ce que ça a du sens? et peut-il être corrigé?
Vous auriez dû dire que Earilier, vous pouvez garder le code tel qu'il était si cela fonctionne. Essayez d'ajouter essayer code> et attraper code>. En savoir plus ici .
Le résultat lorsque vous numérisez un code à barres n'est souvent pas une URL valide. C'est souvent juste une corde à plusieurs chiffres. Il n'a pas Vous pouvez spécifier certains cas pour gérer le résultat. Par exemple, si le résultat commence par "http: //" ou "https: //", utilisez directement votre code pour gérer, mais s'il ne s'agit que d'une chaîne de chiffres, affichez-le directement ou l'annexez après une certaine corde avant Il est utilisé pour Par exemple, (le code ci-dessous écrit dans Mobile n'a pas été testé, montrez simplement l'idée): P> uri.parse code>, par exemple " https://google.com / rechercher? q = ", pour rechercher cette valeur de code à barres, ou d'autres choses que vous souhaitez faire avec ce résultat à 13 chiffres. P> @Override
public void onClick(DialogInterface dialog, int which) {
Intent browserIntent;
if (myResult.startsWith("http://") || myResult.startsWith("https://"))
browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(myResult));
else
browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com/search?q=" + myResult));
startActivity(browserIntent);
}
Oui! C'est exactement ce que je voulais faire ... une recherche Google contenant les chiffres reçus du code à barres. Ça vous dérange de me montrer comment faire ça? Je suis très nouveau je n'ai aucune idée de la façon de le faire. Merci beaucoup!
@Mohnab Voir ma réponse mise à jour. C'est plus facile que vous ne le pensez.
Je l'ai ajouté à mon code et ça marche absolument parfaitement! Merci beaucoup pour votre patience, votre aide et vos réponses rapides! :RÉ
@Mohnab Si la réponse de quelqu'un vous aide avec succès, vous pouvez uppoter et accepter cette réponse, ce qui aide les autres à résoudre leurs questions similaires plus rapidement, par exemple le mien :-)
J'ai cliqué sur la tique verte, était-ce comment accepter la réponse?
@Mohnab oui :-)
Où l'erreur se produit?
Hey Daniel, l'erreur se produit lorsque je clique sur le bouton "Visiter" de l'application. Il est censé obtenir des informations de l'analyse de code à barres et la mettre dans une recherche sur Internet, donc "visite". Lorsque je clique sur ce bouton, le message d'erreur ci-dessus est ce que je reçois ... J'espère que cela répondit votre question, sinon, laissez-moi savoir quels autres détails je peux vous donner
Je voulais dire, dans quelle ligne du code?
Plus ce qui est myresult? Où est la valeur de cela?
Je pense que l'erreur se produit ici: Intention Browserintent = Nouvelle intention (Intention.Action_View, URI.PARSE (myRESULT));
MyResult est fabriqué ici: Public Void Handleresult (résultat de résultat) {Final String myResult = résultat.getext (); Log.d ("qrcodescanner", résultat.gettext ()); Log.d ("qrcodescanner", résultat.getbarcoreformat (). Tostring ());
Veuillez vérifier que la partie spécifique du code est familière avec la valeur de MyResult.
Je ne comprends pas tout à fait ce que tu veux dire par "familier", pouvez-vous élaborer?
HMM, le code semble bien, il semble que le système n'a aucune idée de la valeur myresulte détient, car cette variable n'existe que dans une autre fonction ou une autre partie du code. Pourquoi ne pas passer MyResult à Onclick?
Public Void Onclick (boîte de dialogue Dialoginterface, Int qui, String MyResult) Code>Hé, j'ai essayé de faire cela à mon code, mais je reçois le soulignement rouge sous "String", disant "ne peut pas résoudre le symbole" String ""
Vous définissez
myResult code> àchaîne code> pas surchaîne code>. Changer l'un d'entre eux.Lisez à propos de la différence ici .
Je l'ai changé en chaîne et j'ai obtenu ces 3 erreurs ---- >>> Erreur: (147, 81) Erreur: n'est pas abstrait et ne remplace pas la méthode abstraite onclick ( Dialoginterface, int) dans OnClickListener +++++++++++++ Erreur: (148, 13) Erreur: méthode ne remplace pas ou n'implique pas une méthode à partir d'un Superype ++++++++++++ +++++++++ Erreur: EXECUTION a échoué pour la tâche ': App: Compiledebugjavawithjavac'. > La compilation a échoué; Voir la sortie d'erreur du compilateur pour plus de détails.
J'ai compris. À propos. Essayez de créer une variable statique
String String MyTURN CODE>, puis vous pouvez l'utiliser librement.Il est indiqué que "le modificateur statique n'est pas autorisé ici"
Pourriez-vous coller tout le code?
Oui, je vais mettre à jour le poste lui-même pour comporter le code source complet: je vais le saisir maintenant
On dirait que vous essayez d'ouvrir une URL WebPage. Pour cela, vous avez besoin d'une application de navigateur Web comme Google Chrome. Avez-vous un navigateur installé?
@Saikrishnarajaraman oui j'ai Google Chrome installé sur le périphérique Android que je teste le programme sur
@Danielreyhanian j'ai collé le code source comme réponse
Pouvez-vous poster la valeur de myResult? Ne semble pas être une URL je suppose
@Saikrishnarajaraman Vous avez raison, la valeur n'est pas une URL, c'est le résultat de la numérisation du code à barres, il s'agit donc d'un nombre à 13 chiffres.