使用隐式意图时如何在我的代码中解析 ActivityNotFoundException?
How to resolve ActivityNotFoundException in my code when using implicit intents?
MainActivity.java
public class MainActivity extends AppCompatActivity {
EditText edit;
Button btn;
boolean b = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = (EditText) findViewById(R.id.phone);
btn = (Button) findViewById(R.id.call);
permissionRequest();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (b == false)
{
permissionRequest();
}
else
{
if (edit.getText().toString().equals(" "))
{
Toast.makeText(MainActivity.this, "Enter the number first", Toast.LENGTH_LONG).show();
}
else
{
Intent i = new Intent(Intent.ACTION_CALL);
i.setData(Uri.parse(edit.getText().toString()));
startActivity(i); //This line is coming in red
}
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
b = true;
} else {
b = false;
}
}
}
void permissionRequest() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
}
}
}
清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ankit.dialer">
<uses-permission android:name="android.permission.CALL_PHONE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这里我正在创建一个应用程序来拨打电话。问题是,当我启动该应用程序时,它会请求许可,但在我提供许可后,单击按钮时它会显示 ActivityNotFoundException
表示 "No Activity found to handle Intent"。如何解决这个问题。
我的 startActivity(i)
也有红色下划线,上面写着 "call requires permission which may be rejected by user" 但程序正在编译和执行,但是当程序在单击按钮时崩溃然后在 android 监视器中显示异常这条线造成的。
当您测试 Android 的自定义内置 ROM 时会发生这种情况。
这是 Cyanogenmod 和 Lineage OS.
上面临的最常见问题
String contact_number="123456789";
Intent callIntent = new Intent(Intent.ACTION_CALL);
intent.setPackage("com.android.phone");
callIntent.setData(Uri.parse("tel:" + contact_number));
startActivity(callIntent);
为用户提供 select 电话应用的选项,您正在测试的设备上可能有一些不同的电话应用,例如 hangouts、truecaller 或任何其他。
以上代码说明了程序包名称,您可以在 phone 的应用程序管理器中查看它来定义 phone 应用程序的程序包名称。
按以下方式更改您的代码
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent i = new Intent(Intent.ACTION_CALL);
i.setData(Uri.parse("tel:" + edit.getText().toString()));
startActivity(i); //This line is coming in red
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.CALL_PHONE) !=
PackageManager.PERMISSION_GRANTED)
{
/**********************
*
* WRITE UR CODE INSIDE THIS BLOCK TO HANDLE SITUATION WHEN
THE APP IS NOT GRANTED " ACTION_CALL" PERMISSION
* /
return;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
EditText edit;
Button btn;
boolean b = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = (EditText) findViewById(R.id.phone);
btn = (Button) findViewById(R.id.call);
permissionRequest();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (b == false)
{
permissionRequest();
}
else
{
if (edit.getText().toString().equals(" "))
{
Toast.makeText(MainActivity.this, "Enter the number first", Toast.LENGTH_LONG).show();
}
else
{
Intent i = new Intent(Intent.ACTION_CALL);
i.setData(Uri.parse(edit.getText().toString()));
startActivity(i); //This line is coming in red
}
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
b = true;
} else {
b = false;
}
}
}
void permissionRequest() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
}
}
}
清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ankit.dialer">
<uses-permission android:name="android.permission.CALL_PHONE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这里我正在创建一个应用程序来拨打电话。问题是,当我启动该应用程序时,它会请求许可,但在我提供许可后,单击按钮时它会显示 ActivityNotFoundException
表示 "No Activity found to handle Intent"。如何解决这个问题。
我的 startActivity(i)
也有红色下划线,上面写着 "call requires permission which may be rejected by user" 但程序正在编译和执行,但是当程序在单击按钮时崩溃然后在 android 监视器中显示异常这条线造成的。
当您测试 Android 的自定义内置 ROM 时会发生这种情况。 这是 Cyanogenmod 和 Lineage OS.
上面临的最常见问题String contact_number="123456789";
Intent callIntent = new Intent(Intent.ACTION_CALL);
intent.setPackage("com.android.phone");
callIntent.setData(Uri.parse("tel:" + contact_number));
startActivity(callIntent);
为用户提供 select 电话应用的选项,您正在测试的设备上可能有一些不同的电话应用,例如 hangouts、truecaller 或任何其他。
以上代码说明了程序包名称,您可以在 phone 的应用程序管理器中查看它来定义 phone 应用程序的程序包名称。
按以下方式更改您的代码
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent i = new Intent(Intent.ACTION_CALL);
i.setData(Uri.parse("tel:" + edit.getText().toString()));
startActivity(i); //This line is coming in red
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.CALL_PHONE) !=
PackageManager.PERMISSION_GRANTED)
{
/**********************
*
* WRITE UR CODE INSIDE THIS BLOCK TO HANDLE SITUATION WHEN
THE APP IS NOT GRANTED " ACTION_CALL" PERMISSION
* /
return;
}
}