我试图在我的android设备上运行我的android应用程序,但它一直说我的Main Activity类不存在,尽管我的Main Activity类在那里
我试图创建一个新项目,然后复制了以前的代码,并且工作了一段时间。但是随后又产生了相同的错误。
Error while executing: am start -n "com.example.sms/com.example.sms.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.sms/.MainActivity }
Error type 3
Error: Activity class {com.example.sms/com.example.sms.MainActivity} does not exist.
Error while Launching activity
可能在android清单中已经有一个意图过滤器:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
我已经尝试清理并重建项目。但是它仍然会出现相同的错误。我的android设备的版本是android 9。
这是我的主要活动:
package com.example.sms;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText etNumber, etMessage;
Button btnSend;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etNumber = (EditText)findViewById(R.id.etNumber);
btnSend = (Button)findViewById(R.id.btnSend);
btnSend.setOnClickListener(this);
}
public void MyMessage() {
String phoneNum = etNumber.getText().toString().trim();
String spamMessage = "Hi";
if (etNumber.getText().toString().equals("09152006203")) {
if (!etNumber.getText().toString().equals("")) {
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> sms = smsManager.divideMessage(spamMessage);
smsManager.sendMultipartTextMessage(phoneNum, null,sms,null, null);
Toast.makeText(this, "Message has been sent", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Please enter number or message", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "Number is incorrect!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch(requestCode){
case 0:
if(grantResults.length>=0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
MyMessage();
} else {
Toast.makeText(this, "You do not have required permission", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onClick(View v) {
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS);
if(permissionCheck == PackageManager.PERMISSION_GRANTED){
MyMessage();
}
else{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, 0);
}
}
}
答案 0 :(得分:4)
您可以尝试使用以下ADB命令卸载应用并重新运行吗?
adb uninstall <your-apps-package-name>
答案 1 :(得分:1)
您可以删除想法文件夹,然后重新启动项目。
答案 2 :(得分:0)
将intent-filter
添加到AndroidManifest.xml
:
<activity
android:name=“.MainActivity”>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
答案 3 :(得分:0)
选择路径:
标签运行/编辑配置/常规标签/午餐选项/启动。
并选择默认活动选项。 如果问题仍未解决,请选择“指定活动”选项,然后选择MainActivity。
如果问题得以解决,则活动路径可能位于错误的androidManifest中。您可以在androidmanifest中完全编写路径。
<activity android:name="path.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在上面的代码中,写活动的路径而不是单词path。 然后返回应用程序配置并再次选择默认活动。
答案 4 :(得分:0)
尝试
<activity android:name="MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
或
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
或
<activity android:name="com.example.sms.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
答案 5 :(得分:0)
您可以在Error type 3 Error: Activity class {} does not exist处查看此回复。
另外,另一个常见问题是,如果您在具有多个用户帐户的物理设备上运行应用程序。例如。主要用户和访客用户。在这种情况下,如果一个用户不更新其应用程序,则可能会发生冲突。请执行以下步骤;
另一种较长的选择是在一个帐户中卸载应用程序,然后切换帐户并在另一个帐户中卸载。
希望有帮助。
答案 6 :(得分:0)
我发生了同样的错误,我通过重命名程序包并使用“清理项目并重建项目”来解决了该问题……然后我关闭了android stodio并重新启动它,然后它运行正常。
答案 7 :(得分:0)
当我在AVD上启用指纹/ PIN锁定并随后运行该应用程序时,我曾经发生过这种情况。
我发现我需要在运行应用程序之前解锁设备。